Java内存模型 - 在穿越内存屏障时到底是什么?

时间:2012-04-02 20:53:16

标签: java multithreading java-memory-model

我想我理解单变量之前发生过的关系。如果我写一个volatile字段,则该字段的所有后续读取都将包含此新值。写volatile穿过内存屏障并将新值刷新到主内存。

我仍然不清楚所有其他情况会发生什么 - 例如Thread.start()synchronizedjava.util.concurrent中的新锁。他们还跨越记忆障碍意味着什么?什么数据从本地缓存刷新到主内存?换句话说,交叉的范围是什么?

一切总是被刷新吗?现在回到volatile,它是否只冲洗单个volatile字段?

1 个答案:

答案 0 :(得分:12)

当跨越内存屏障时,JVM将所有本地(在当前线程的上下文中)缓存变量与主内存同步。除此之外,它还会删除在主内存中标记为脏的任何本地缓存数据。

关于volatile - 是的,它还会同步本地缓存的所有内容与主内存,而不仅仅是单个volatile字段(从1.5开始)

http://www.javamex.com/tutorials/synchronization_volatile_java_5.shtml