Мне нужна помощь здесь.Я пытаюсь создать пример, показывающий, что volatile необходим для защиты от переупорядочения команд.
В этом примере я пытаюсь показать, что b> a только в случае, если переупорядочение происходит и что volatile предотвращает его.
Проблема в том, что при каждом запуске я получаю b> a, и мне, должно быть, не хватает чего-то идиотского, но я не вижу этого.
Чего мне здесь не хватает?
public class Example04Reorder extends Thread {
volatile static int a = 0;
volatile static int b = 0;
public static void main(String[] args) throws InterruptedException {
Example04Reorder t = new Example04Reorder();
t.start();
while( true )
{
if ( b > a ) // supposedly happens only on reordering
{
System.out.println("b was bigger than a");
System.exit(1);
}
}
}
public void run() {
while (true)
{
a = 5;
b = 4;
b = 0;
a = 0;
}
}
}