非法监控状态等待()调用时的异常
2022-08-31 07:03:21
我正在使用Java中的多线程作为我的程序。我已经成功运行线程,但当我使用时,它正在抛出。如何让线程等到收到通知?Thread.wait()
java.lang.IllegalMonitorStateException
我正在使用Java中的多线程作为我的程序。我已经成功运行线程,但当我使用时,它正在抛出。如何让线程等到收到通知?Thread.wait()
java.lang.IllegalMonitorStateException
您需要在一个块中才能工作。synchronized
Object.wait()
另外,我建议查看并发包,而不是旧的学校线程包。它们更安全,更易于使用。
编辑
我以为你的意思是,当你试图在不按住对象锁的情况下获得访问权限时,你的例外是什么。Object.wait()
wait
在 中定义,而不是 它。显示器打开有点不可预测。Object
Thread
Thread
尽管所有 Java 对象都有监视器,但通常最好有一个专用锁:
private final Object lock = new Object();
通过使用命名类,您可以稍微更轻松地读取诊断信息,但内存成本较小(每个进程约 2K):
private static final class Lock { }
private final Object lock = new Lock();
为了或/一个对象,你需要用语句握住锁。此外,您将需要一个循环来检查唤醒条件(找到有关线程的好文本来解释原因)。wait
notify
notifyAll
synchronized
while
synchronized (lock) {
while (!isWakeupNeeded()) {
lock.wait();
}
}
要通知:
synchronized (lock) {
makeWakeupNeeded();
lock.notifyAll();
}
在进入多线程处理时,非常值得了解Java语言和锁(和)。但请尽可能使用数据结构。java.util.concurrent.locks
java.util.concurrent.atomic
java.util.concurrent