【问题标题】:Java IllegalMonitorStateException when using thread.wait();使用 thread.wait() 时出现 Java IllegalMonitorStateException;
【发布时间】:2022-01-09 16:15:40
【问题描述】:

我是使用线程的新手,一旦调用 wait 方法,我就会收到 IllegalMonitorStateException 有人可以帮助我吗

public class SomeClass{

    private final Thread thread = new Thread(this::someMethod);

    public synchronized void someMethod(){
        try {
            doSomething();
            TimeUnit.SECONDS.sleep(2);
            doSomething();
            thread.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        someMethod();
    }

    public synchronized void restartThread() {
        thread.notify();
    }
        SomeClass test = new SomeClass();
        test.start();

【问题讨论】:

    标签: java multithreading exception


    【解决方案1】:

    waitnotify 方法只能在您已获得锁的监视器对象上调用。 在您的情况下,您获得了SomeClass 类型对象的锁定,但是您尝试在thread 对象的监视器上调用这些方法。 相反,您应该只在代码中调用 wait();notify();,这将在 this 对象上调用它们,这与您在方法上使用 synchronized 关键字获得锁的对象完全相同。

    【讨论】:

      猜你喜欢
      • 2010-12-04
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 2023-03-13
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多