Java:没有“同步”的内存同步何时发生?

时间:2012-11-12 03:58:49

标签: java synchronization

对于具有synchronized方法的类,我们知道当一个线程进入这样的方法时,它会使用来自主内存的对象状态更新其缓存,当它离开这样的方法时,它会将其更改写入主存中的对象状态。

然而,在没有synchronized方法的情况下,线程是否会进入主内存以获取该对象的状态(当然除了第一次),或者将更改后的状态写回内存?如果是,在什么条件下?

一个明显的想法是,当缓存是“满”和脏时,线程必须在读取更多数据之前将其刷新到主存储器,或者如果缓存无效,则必须丢弃它并从主内存中获取最新数据。它是否正确?还有其他条件可以实现这种“自动”内存同步吗?

1 个答案:

答案 0 :(得分:1)

在传统的O / S(linux,windows)中,线程经常被中断并关闭处理器,让其他线程运行。当发生这种线程切换时,处理器高速缓存也被清除。

另一种情况是volatile变量,它根本就没有缓存。