2016-10-01 6 views
2

ロックと同期に関する質問があります。私は両方のロックを保持する2つのオブジェクトのロックを保持する

private void c(){ 
for(int i=0;i<=0;i++){ 
     a(); 
     b(); 
     Thread.sleep(2000); 
    } 
} 

private void a(){ 
    synchronized(obj1){ 
     System.out.println("Object 1 being used"); 
    } 
     System.out.println("Object 1 finished"); 

} 

private void b(){ 
    synchronized(obj2){ 
     System.out.println("Object 2 being used"); 
    } 
     System.out.println("Object 2 finished"); 

} 

また、私は第三の方法を持っている:

私はロックが2オブジェクトロックが1オブジェクト方法、及び他の方法を持っていますオブジェクト、1と2、方法cが実行されている間に、cが実行された後、両方のロックを解放することができます。どうすればこれを達成できますか?ループをforループに入れようとしましたが、メソッドabだけが開始して終了します。

答えて

1

はCメソッドを持っているネストされたブロックの両方のロックを取得:メソッドaとbは、すでにそれらを獲得することは重要ではありませんので、

synchronized (obj1) { 
    synchronized (obj2) { 
     // c method logic here 
    } 
} 

固有のロックが再入可能です。

これを行うメソッドを複数作成する場合は、デッドロックを回避するために同じ順序でロックを取得するようにしてください。

+0

ありがとうございます:) – Felipe

関連する問題