2
我正在做如下,我的程序中只有2个线程。在存在volatile变量的情况下是否可以重新排序?
// 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
我想知道这是否我的理解是否正确。
特别是可以重新排列仍然发生,所以我在第二个线程中看到a = 0?
我还是不明白为什么重新排序不能在线程中发生1.为什么a不能是0?唉,我只是不明白,请问,请告诉我JLS规范在哪里说的? – 2014-08-28 13:14:41
@Alex - 链接问题的答案引用JLS。基本上,在写入易失性后,您不能将任何写入移动到任何可读取的位置,也不能将任何读取移动到易失性读取之前。 – jtahlborn 2014-08-28 13:16:33