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

Kon*_*rus 15 java multithreading java-memory-model

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

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

一切总是刷新?现在又回到了volatile,它是否比单个volatile场更冲洗?

Eug*_*sky 12

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

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

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