// In Thread1
x=5;
synchronization(obj)
{
// do something (no operations involving x)
}
// In thread 2
synchronization(obj)
{
// do something(operations involving x)
}
そのブロックに入る前に、JVMが同期ブロックの前にすべてのステートメントを最初に実行する必要があるという要件はありますか? Thread-1 では、同期ブロックには関係する操作がないため、x
最初に同期ブロックを実行し、次に代入操作を実行できますx=5
。
そして、スレッド 2 はx
、その同期ブロック内の の値を参照します。オブジェクトが作成されたときに、最初に Thread-1 が実行され、次に Thread-2 が実行され、両方が同じオブジェクトで実行されているとしますx = 0
。
スレッド 1 の同期ブロックは、スレッド 2 の同期ブロックの前に発生すると言えます。x
では、その同期ブロック内のスレッド 2の値はどうあるべきでしょうか?