안녕하세요, Java에서 대기 동작을 테스트하기위한 샘플 프로그램을 작성했습니다.잘못된 모니터 상태 두 개의 쓰레드가 대기 중일 때 예외가 발생합니다.
의 Runnable의 내 구현 :
class ThreadWait implements Runnable {
Object lock = new Object();
ThreadWait(Object lock){
this.lock = lock;
}
@Override
public void run() {
try {
synchronized (lock){
System.out.println("Started : "+Thread.currentThread().getName());
wait();
System.out.println("Completed : "+Thread.currentThread().getName());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
내에서 사용되는 내
main
같은 :
Exception in thread "A" Exception in thread "B" java.lang.IllegalMonitorStateException
Started : A
at java.lang.Object.wait(Native Method)
Started : B
at java.lang.Object.wait(Object.java:502)
at ThreadWait.run(SynchronizedExample.java:34)
at java.lang.Thread.run(Thread.java:745)
java.lang.IllegalMonitorStateException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:502)
at ThreadWait.run(SynchronizedExample.java:34)
at java.lang.Thread.run(Thread.java:745)
'lock.wait()'...? – MadProgrammer