gpt4 book ai didi

java - 出现 java.lang.illegalMonitorStateException,如何修复?

转载 作者:行者123 更新时间:2023-12-01 21:58:43 28 4
gpt4 key购买 nike

我有这个错误“java.lang.illegalMonitorStateException”,我不知道如何修复它。我知道 notifyAll() 似乎是原因,尽管我尝试了几件事,例如放置同步块(synchronized block)或其他东西,但我不太确定如何使用它。我习惯把“同步”这个词放在“公共(public)”后面,但这次我不能这样做。基本上,每次 msgQueue 上有新消息时,我都需要唤醒 getNextMessage() 函数,同时它被“阻止”。

private LinkedList<NetClientSideMessage> msgQueue = new LinkedList<NetClientSideMessage>();


@Override
public ClientSideMessage getNextMessage() {
//wait for messages
if (hasNextMessage() == false)
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}

// if connection is down, return null
if (isConnected() == false)
return null;

return msgQueue.getFirst();

}

@Override
public boolean hasNextMessage() {
// check if there are messages waiting in queue
if (msgQueue.size() > 0) {
notifyAll();
return true;
}
return false;
}

最佳答案

您在没有锁的情况下使用wait/notifyAll!你根本不能那样做。在方法声明中添加同步应该可以修复它。

public synchronized ClientSideMessage getNextMessage() {
}

public synchronized boolean hasNextMessage() {
..
}

关于java - 出现 java.lang.illegalMonitorStateException,如何修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33989123/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com