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