0

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

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

一个明显的想法是,当缓存“满”且脏时,线程必须在读取更多数据之前将其刷新到主内存,或者如果缓存无效,它将不得不丢弃它并获取最新的来自主存储器的数据。这个对吗?是否还有其他条件会发生这种“自动”内存同步?

4

1 回答 1

1

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

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

于 2012-11-12T05:20:45.413 回答