最近在学习多线程的时候遇到一个问题。
我用不同的线程类分别实例化了一个线程 thread1 和 thread2
thread1 和 thread2 分别在各自的 run 方法中 synchronize 了一个静态对象,然后在 thread1 中调用了 wait 方法,在 thread2 中调用了 notify 方法,发现会报错 java.lang.IllegalMonitorStateException
希望有大佬能够给小弟解答一二,非常感谢!
下面是代码:
public class MyThread extends Thread {
@Override
public void run() {
synchronized (Main.i) {
while (true) {
Main.i = Main.i + 1;
if (Main.i == 2) {
try {
Main.i.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
public class MyThread2 extends Thread {
@Override
public void run() {
synchronized (Main.i) {
while (true) {
if (Main.i==2){
Main.i.notify();
}
}
}
}
}
public class Main {
public static volatile Integer i = 0;
public static void main(String[] args) {
MyThread myThread = new MyThread();
MyThread2 myThread2 = new MyThread2();
myThread.start();
myThread2.start();
}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.