3

同期されたメソッドが (別のクラスの) 別の同期されたメソッドを呼び出し、それが wait() を実行するとどうなるでしょうか。別のクラスですが、最初の同期メソッドでもロックが解除されますか?

例えば

    public class A {
        private B b;

        public A(B b) {
           this.b = b;
        }

        public synchronized String a() {
           return b.b();
        }
   }

    public class B {

        public synchronized String b() {
            while (!someCondition) wait();
            return "Success!";
        }
    }

私の質問は、 someCondition = false の間に A に別の同期メソッドを入力することは可能ですか? それとも、a() が戻るまで、A で別の同期メソッドに入ろうとしても失敗する一方で、wait() は B で他の同期メソッドに入ることを可能にするだけですか?

4

1 に答える 1

0

aいいえ。 andを呼び出している間、他のメソッドはいずれもor (またはクラスorの他の同期メソッド) にb入ることはできません。ただし、それ以降のすべての同期メソッドのロックを解放しますabABb.wait()B

public synchronized String b() 

本質的に同等です

public String b() {
   synchronized(this) {
    ..
   }
}
于 2012-10-20T22:11:36.983 に答える