1

これらの Java の状況でデッドロックが発生します
1-

synchronized(obj) {
   obj.syncMethod(); // the method signature: public synchronized void syncMethod() {...}
}

2-

synchronized(obj) {
  if (condition) 
     throw new Exception(); // deadlock because obj lock is not released?
  // do other stuff
}

ありがとうございました。

4

3 に答える 3

2
  1. デッドロックは発生しません。あなたはすでにobjへのロックを保持しています。

  2. 例外がスローされると、ロックが解放されます。ここでSOに関する質問を参照してください:

同期句内で例外をスローすることの副作用?

于 2012-04-11T23:03:11.870 に答える
1
  1. デッドロックは発生しません-Javaのロックは再入可能です。つまり、スレッドがロックを保持している間(あなたの場合はobjで)、同じロックを必要とする同期ブロックに問題なく入ることができます(同期メソッドはこれで同期されます obj です)あなたの場合も)。
  2. 例外によってスレッドがブロックを離れたかどうかに関係なく、ロックは同期ブロックが離れると解放されます。
于 2012-04-11T23:22:10.027 に答える
0

ブロック内で例外をキャッチしない場合synchronized、ロックは解放され、デッドロックは発生しません。詳しくはこちらをご覧ください。

于 2012-04-11T23:03:25.470 に答える