可以在存在易变变量的情况下进行重新排序吗?

时间:2014-08-28 12:12:37

标签: java volatile

我的做法如下,我的程序中只有2个主题。

// Thread 1
write a = 0
write a = 1
write volatile b = 1

// Thread 2
read volatile b // this I always do after write volatile b in the 1st thread
read a

我已经阅读了Java内存模型,并且从我在第2篇read a中理解的内容中总是会给我1个。

我想知道我的理解是否正确。

特别是CAN A REORDERING仍然是HAPPEN因此我在第二个线程中看到= 0?

1 个答案:

答案 0 :(得分:2)

您的假设大多是正确的。但是,我会略微重申它以匹配JMM保证的内容。

如果线程2读取b 并看到值1 ,则后续读取a将为1.如您所说,如果线程2始终读取{{1在“线程1完成写入之后”,然后线程2将看到值1,并且b的读取将如您所愿。