0
public static void main(String[] args) {
String resource1 = "ratan jaiswal";
Thread t1 = new Thread() {
public void run() {
synchronized (resource1) {
System.out.println("Thread 1: locked resource 1");
try {
Thread.sleep(100);
} catch (Exception e) {
}
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
Thread t2 = new Thread() {
public void run() {
synchronized (resource1) {
System.out.println("Thread 2: locked resource 2");
try {
Thread.sleep(100);
} catch (Exception e) {
}
}
}
};
t1.start();
t2.start();
}
私はt1がリソース1のモニターを所有しているので、すべてがここでOKです見るように私はこの例外を取得するのはなぜ ライン16は、()同期ブロックでIllegalMonitorExceptionが発生するのはなぜですか?私はこのコードを実行した後
Exception in thread "Thread-0" java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Unknown Source)
at ThreadSyncFromMark.deadlock.dead$1.run(dead.java:16)
を呼び出し待ちとラインで取得しますそれは私がt1が、それは呼んで待つリソース1のモニターを所有しているので、すべてがここでOKです見るように私はこの例外を取得するのはなぜ
スレッドがオブジェクトのモニタで待機しようとしたこと、または指定されたmonitor_を所有していないオブジェクトのモニタで待機している他のスレッドに通知しようとしたことを示す、 – AxelH