void method1() {
synchronized(this) { // Acquires intrinsic lock
method2();
}
}
void method2() {
synchronized(this) {} // Acquires same lock due to Reentrant synchronization
}
最初のロックは、2 回目に同じロックを取得する同期メソッド 2 を呼び出すメソッド 1 で取得されます。
ここで、同期ブロックが method2() で終了すると、ここで初めてロック解除が行われ、 method1() の同期ブロックに戻り、再びロック解除が 2 度目に行われるときに疑問が生じます。
ReentrantLock のように内部でロック数を管理していますか?