내가 두 스레드가 서로 뭔가를 인쇄 할 수 있도록 노력 java.lang.IllegalMonitorStateException`,하지만 난 얻을 결과였다 : 이미 동기화 된 블록의 공유 객체를 포함하고 호출 한 자바 멀티 스레드 오류가`
0
Exception in thread "Thread-0" wait in decrement
java.lang.IllegalMonitorStateException
at java.lang.Object.notify(Native Method)
at thread.Multithread2.increment(Multithread2.java:38)
at thread.Multithread2.run(Multithread2.java:18)
at java.lang.Thread.run(Unknown Source)
이 객체의 wait()/notify(). 나는 왜 아직도 예외를 던지는 지 모르겠다.
public class Multithread2 implements Runnable {
private Integer integer;
private int method;
public Multithread2(Integer integer, int method) {
this.integer = integer;
this.method = method;
}
@Override
public void run() {
try {
Thread.sleep(20);
for(int i = 0; i < 5; i++) {
if(method == 1) {
increment();
} else {
decrement();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void increment() throws InterruptedException {
synchronized(integer) {
while(integer > 0) {
integer.wait();
}
System.out.println(integer);
integer++;
integer.notify();
}
}
public void decrement() throws InterruptedException {
synchronized(integer) {
while(integer <= 0) {
integer.wait();
}
System.out.println("decrement: " + integer);
integer--;
integer.notify();
}
}
}
주요 방법 :
Integer integer = new Integer(0);
Thread t1 = new Thread(new Multithread2(integer, 1));
t1.start();
Thread t2 = new Thread(new Multithread2(integer, 2));
t2.start();
'정수 ++ '는'정수 = 정수 +1 '과 같습니다. 'synchronized '와 동일한'integer'에 대해'notify() '를 호출하지 않습니다. –