我想学习多线程和练习,我试图打印奇数&偶数使用两个线程。我创建了一个对象,它将充当这两个线程的锁。当我尝试执行它时抛出java.lang.IllegalMonitorStateException
。使用多线程打印奇数和偶数
class EVENODDimpl implements Runnable {
int num;
int temp = 0;
Object lock = new Object();
public EVENODDimpl(int num) {
this.num = num;
}
public void run() {
try {
synchronized (lock) {
while(temp<num) {
temp++;
System.out.println(Thread.currentThread().getName()+" "+temp);
this.notify();
this.wait();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
主要方法:
public class EVENODD {
public static void main(String[] args) {
int i = 10;
EVENODDimpl ei = new EVENODDimpl(i);
Thread t1 = new Thread(ei,"EvenThread");
Thread t2 = new Thread(ei,"OddThread");
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
我认为问题是,你正在同步一个对象,但然后调用另一个“通知”和“等待”。 – Tavo