だから私はこのコードを持っているとしましょう:
public void bar(){
synchronized(foo){foo.remove(0)}
}
public void doStuff(){
synchronized(foo){
bar()
}
}
同期は、現在のチェーンにこのロックがあり、それを継承していることを認識しますか、それともデッドロックしますか?
同期されたブロックから取得するロックは再入可能です。これはデッドロックにはならず、スレッドは同じオブジェクトのロックを複数回取得できます。
固有のロックと同期を参照してください。
マットが言ったように、それはデッドロックにはなりません。
私はそれをどのように見るか
このロックメカニズムは、メソッド呼び出しではなく、制御フローに依存していること。単一のスレッドがステートメントを実行する方法と、スレッドが同期ブロックに遭遇すると、同期署名でオブジェクトのロックを要求します。
それがある場合は、それ以外の場合は、通知を受け取るまでオブジェクトのロックプールで待機します。
doStuff()を実行したスレッドはすでにロックを実行しているため、デッドロックが発生することはありません。