Java の同期ブロックの概念に頭を悩ませています。シンクロナイズド メソッドを十分に理解できたと思います。そこで、同期メソッドの観点から同期ブロックを理解するのに役立つアナロジーを考えました。私が提案したこの同等性が正しいかどうか教えてください。また、現時点では非静的同期ブロックについてのみ言及しました。ただし、静的同期ブロックのポイントも歓迎します。
public void method()
{
//code snipppet A
synchronized(objRef)
{
//code snipppet B
}
//code snipppet C
}
に等しい
public void method() {
//code snippet A
objRef.sync_method();
//code snippet C
}
objRef のクラス:
public synchronized void sync_method() {
//code snippet B
}
この類推は、同期ブロックが同期メソッドと同じように動作するというロジックに基づいています。つまり、スレッドがモニターでロックを取得すると、他のスレッドがその実行に干渉することはできなくなります。スレッドは、同期されたメソッド全体の実行を終了した場合にのみ、制御を放棄します。