【发布时间】:2013-10-02 13:31:48
【问题描述】:
在阅读了一堆关于这个主题的问题/文章后,我还有一件事不清楚。
据我了解(如果我错了,请纠正我)是一个变量的值可以在本地缓存到一个线程,所以如果一个线程更新该变量的值,这个变化可能对另一个不可见线。然后使用volatile 本质上是强制所有线程从同一位置读取变量的值。此外,有关该主题的所有文献都指出,对该变量进行同步将具有相同的效果。
我的问题是,我读过的任何内容都没有明确指出在 不同 变量上同步会导致相同的行为,但经常提供代码示例说明在以下两种情况下,从变量中读取将是最新的:
volatile int x;
...
int y = x;
和
final Object lock = new Object();
int x;
...
synchronized(lock) {
int y = x;
}
那么问题来了:对任意变量进行同步是否会强制同步块中的每个变量访问都访问该变量的最新值?
【问题讨论】:
-
无法回答你的问题,但我不得不说你的标题......是史诗般的。让我想起托尔金对指环王的开场白,“关于霍比特人”。
标签: java multithreading synchronized volatile