我做如下,我的程序中只有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。
我想知道我的理解是否正确。
特别是是否仍会发生REORDERING,所以我在第二个线程中看到a = 0?
您的假设基本上是正确的。但是,我会稍微重申一下以符合JMM的保证。
如果线程2读取b
并看到值为1,则随后的读取a
为1。像你说的,如果线程2总是读b
“后,”线程1个写完它,然后线程2将看到值1并且读a
会如您所料。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句