出现这个问题的原因就是:
表明此线程不是此对象监视器的所有者。
比如你想调用notify()、wait()等线程中的方法,那么你需要用锁对象去调用,而不是用线程本身this或class去调用。
示例代码:
static class ThreadTest extends Thread {
public ThreadTest(String name) {
super(name);
}
@Override
public void run() {
while (true) {
synchronized (ThreadTest.class) {
System.out.println(Thread.currentThread().getName() + ":我叫了");
try {
Thread.sleep(1000);
// 这里应该用ThreadTest.class去调用notify,而非使用this去调用notify,否则会抛出异常:IllegalMonitorStateException
ThreadTest.class.notify();
ThreadTest.class.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
java```