#concurrency #java
class A {
int a;
int b;
void m1() {
a++;
b++;
}
void m2() {
System.out.println(b);
System.out.println(a);
}
}
// пример вывода
: b=1 a=0
Методы m1 и m2 запускаются в разных потоках, одновременно, один раз каждый
Какие варианты вывода могут быть? (y,x)
(похожая задача была тут - https://t.me/java_interview_tasks/26)
(Методы thread1 и thread2 запускаются в разных потоках, одновременно, один раз каждый)
public class Test {
int x;
volatile int y;
public void thread1() {
x = 1;
y = 1;
}
public void thread2() {
System.out.println(y);
System.out.println(x);
}
}
(похожая задача была тут - https://t.me/java_interview_tasks/26)
(Методы thread1 и thread2 запускаются в разных потоках, одновременно, один раз каждый)
public class Test {
int x;
volatile int y;
public void thread1() {
x = 1;
y = 1;
}
public void thread2() {
System.out.println(y);
System.out.println(x);
}
}
Telegram
Java Interview Tasks
#concurrency #java
class A {
int a;
int b;
void m1() {
a++;
b++;
}
void m2() {
System.out.println(b);
System.out.println(a);
}…
class A {
int a;
int b;
void m1() {
a++;
b++;
}
void m2() {
System.out.println(b);
System.out.println(a);
}…
Какие значения может напечатать код (thread1 и thread2 запускаются одновременно в разных потоках)?
#jmm #concurrency #java #java_interview_tasks
#jmm #concurrency #java #java_interview_tasks
👍11
Ответ на вопрос VolatileVsFinal (https://t.me/java_interview_tasks/140) :
Тут речь идет об одном из самых интересных разрешенных сценариев JMM. Это тот факт, что volatile поле не имеет final семантики.
Это означает, что если мы публикуем ссылку объекта под гонкой, то мы можем увидеть дефолтное значение для volatile поля
Поэтому в данном случае 0 вполне можно получить.
Этот эффект можно увидеть на некоторых платформах, например AArch64:
Тут речь идет об одном из самых интересных разрешенных сценариев JMM. Это тот факт, что volatile поле не имеет final семантики.
Это означает, что если мы публикуем ссылку объекта под гонкой, то мы можем увидеть дефолтное значение для volatile поля
Поэтому в данном случае 0 вполне можно получить.
Этот эффект можно увидеть на некоторых платформах, например AArch64:
RESULT SAMPLES FREQ
-1 1,428,517,070 91.74%
0 7,105 <0.01%
42 128,534,641 8.25%
Telegram
Java Interview Tasks
Какие значения может напечатать код (thread1 и thread2 запускаются одновременно в разных потоках)?
#jmm #concurrency #java #java_interview_tasks
#jmm #concurrency #java #java_interview_tasks
👍16🔥7🤯3❤1