我的做法如下,我的程序中只有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?
答案 0 :(得分:2)
您的假设大多是正确的。但是,我会略微重申它以匹配JMM保证的内容。
如果线程2读取b
并看到值1 ,则后续读取a
将为1.如您所说,如果线程2始终读取{{1在“线程1完成写入之后”,然后线程2将看到值1,并且b
的读取将如您所愿。