0

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
}

この類推は、同期ブロックが同期メソッドと同じように動作するというロジックに基づいています。つまり、スレッドがモニターでロックを取得すると、他のスレッドがその実行に干渉することはできなくなります。スレッドは、同期されたメソッド全体の実行を終了した場合にのみ、制御を放棄します。

4

2 に答える 2

1

Java には 2 種類の同期ブロック(オブジェクト同期とクラス同期)があることに注意してください。2 つの同期メソッド (静的メソッドと非静的メソッド) と、それらと同等の同期ブロック (それぞれ Class ブロックと Object Synchronized ブロック) があります。私たちが持っていると仮定します:

class MyClass{
public synchronized static void syncStaticMethod(){...}
public synchronized void syncNonStaticMethod(){...}
}


MyClass objRef = new MyClass();

1. オブジェクトの同期:

public void method() {synchronized(objRef) { ... }}

に等しい

 public void method() {objRef.syncNonStaticMethod();}

2. クラスの同期:

 public void method() {synchronized(MyClass.class) { ... }}

に等しい

   public void method() {MyClass.syncStaticMethod();}
于 2016-10-30T13:48:01.423 に答える