苦行僧DH

博客园 首页 新随笔 联系 订阅 管理

出现这个问题的原因就是:
表明此线程不是此对象监视器的所有者。
比如你想调用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```
posted on 2021-03-02 15:31  苦行僧DH  阅读(294)  评论(0编辑  收藏  举报