Возможно я что-то упускаю, но не могу понять, как в Вашем примере проверялась работа volatile, у меня всё равно проскакивает то тут, то там значение 0. Мой код ниже:
Hidden text
public class Example {
volatile int x; // общий для всех потоков ресурс
public void exec() {
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
x = 1; // параллельно изменяет общий ресурс
}
});
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
x = 2; // параллельно изменяет общий ресурс
}
});
Thread thread3 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(x); // параллельно читает общий ресурс
}
});
thread1.start();
thread2.start();
thread3.start();
}
}
public class Main {
public static void main(String[] args) throws NoSuchMethodException {
while(true) {
Example example = new Example();
example.exec();
}
}
}
Возможно я что-то упускаю, но не могу понять, как в Вашем примере проверялась работа volatile, у меня всё равно проскакивает то тут, то там значение 0. Мой код ниже:
Hidden text