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