在阅读了关于这个主题的一系列问题/文章之后,我还有一件事情不清楚.
根据我的理解(如果我错了请纠正我)是一个变量的值可以在本地缓存到一个线程,所以如果一个线程更新了该变量的值,这个变化可能对另一个线程不可见.然后使用volatile则基本上强制所有线程从同一位置读取变量的值.此外,关于该主题的所有文献都指出,同步该变量将具有相同的效果.
我的问题是,我读过的任何内容都没有明确指出同步不同的变量会导致同样的行为,但经常会提供一个代码示例,说明在以下两种情况下,从变量读取的值将是最新的:
volatile int x;
...
int y = x;
Run Code Online (Sandbox Code Playgroud)
和
final Object lock = new Object();
int x;
...
synchronized(lock) {
int y = x;
}
Run Code Online (Sandbox Code Playgroud)
那么问题是:在任何任意变量上同步会强制同步块中的每个变量访问来访问该变量的最新值吗?