2つのメソッドでsynchronize(this)を使用し、一方が他方を呼び出す場合、デッドロック状態でスタックしますか、それともスレッドがすでにロックを所有しているために機能しますか?
以下のクラスを想像してください。
public class Test {
public void foo() {
synchronize(this) {
bar();
}
}
public void bar() {
synchronize(this) {
// do something
}
}
}
ご覧のとおり、fooとbarの2つのメソッドがあり、どちらも同期に依存しています。
foo()を呼び出すと、(this)でロックが取得されます。barはfooによって呼び出されたときに同じことを行おうとしますか(したがってデッドロックを引き起こします)、またはロックが同じスレッドによってすでに取得されていることを認識しますか?
私の説明が多かれ少なかれ明確であることを願っています;-)