以下のコードでデッドロックが発生するのはなぜですか?私はgetNumber()を呼び出すと、クラスTestのオブジェクトがロックされているので、getNumber2(。)にアクセスできなくてすべきです。同じオブジェクトの同期メソッドから同期メソッドを呼び出す
class Test() {
synchronized int getNumber(int i){
return getNumber2(i);
}
synchronized int getNumber2(int i) {
return i;
}
public static void main(String[] args) {
System.out.println((new Test()).getNumber(100));
}
}
出力:ロックが、それは同じスレッドで複数回取得することができることを意味する、再入ですので
100
同様の投稿:http://stackoverflow.com/questions/5798637/is-it-safe-to-call-a-synchronized-method-from-another-synchronized-method – Walls
はい質問は同じです文脈は全く異なっています。この質問では、デッドロック、それ以外についてはスレッドセーフについての質問です。 – Lovera