我想我理解单变量之前发生过的关系。如果我写一个volatile字段,则该字段的所有后续读取都将包含此新值。写volatile
穿过内存屏障并将新值刷新到主内存。
我仍然不清楚所有其他情况会发生什么 - 例如Thread.start()
,synchronized
或java.util.concurrent
中的新锁。他们还跨越记忆障碍意味着什么?什么数据从本地缓存刷新到主内存?换句话说,交叉的范围是什么??
一切总是被刷新吗?现在回到volatile
,它是否只冲洗单个volatile
字段?
答案 0 :(得分:12)
当跨越内存屏障时,JVM将所有本地(在当前线程的上下文中)缓存变量与主内存同步。除此之外,它还会删除在主内存中标记为脏的任何本地缓存数据。
关于volatile - 是的,它还会同步本地缓存的所有内容与主内存,而不仅仅是单个volatile字段(从1.5开始)
http://www.javamex.com/tutorials/synchronization_volatile_java_5.shtml