以下のコードは、(これを使用して) 現在のスレッドに通知した後でも実行されません。
public synchronized void test() {
String str = new String();
try {
System.out.println("Test1");
this.wait();
this.notifyAll();
System.out.println("Test2");
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("Inside exception");
e.printStackTrace();
}
}
Test1
コンソールの出力としてのみ取得します。
2 番目のケースでは、文字列オブジェクトで wait メソッドを呼び出すと例外が発生します。その理由は、文字列クラス オブジェクトstr
が現在のオブジェクトのロックを保持していないためです。しかし、私はstr.wait()
実際に何を意味するのだろうか?
public synchronized void test() {
String str = "ABC";
try {
System.out.println("Test1");
str.wait();
str.notifyAll();
System.out.println("Test2");
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("Ins");
e.printStackTrace();
}
}
コンソール出力:
> Test1
java.lang.IllegalMonitorStateException