このトピックに関する一連の質問/記事を読んだ後、まだ不明なことが1つあります。
私が理解していることから(間違っている場合は修正してください)、変数の値はスレッドにローカルにキャッシュできるため、あるスレッドがその変数の値を更新すると、この変更は別のスレッドには表示されない可能性があります。then を使用するとvolatile
、基本的にすべてのスレッドが同じ場所から変数の値を読み取るようになります。さらに、このトピックに関するすべての文献は、その変数で同期すると同じ効果があると述べています。
私の問題は、別の変数で同期すると同じ動作が発生することを明示的に述べているものは何も読んだことがありませんが、次の2つのケースでは変数から読み取られる値が最新であることを示すコード例を頻繁に提供することです. :
volatile int x;
...
int y = x;
と
final Object lock = new Object();
int x;
...
synchronized(lock) {
int y = x;
}
質問は次のとおりです。任意の変数で同期すると、同期ブロック内のすべての変数アクセスがその変数の最新の値にアクセスするように強制されるのですか?