gpt4 book ai didi

java - 如何处理java线程

转载 作者:行者123 更新时间:2023-11-29 04:04:42 25 4
gpt4 key购买 nike

我有一个名为 communicator 的类。此类是从另一个程序接收事件的线程的监听器。此类还有一个方法调用刷新,它向程序发送和操作等待来自监听器的响应。

这两个方法都在同一个类中,但由不同的线程调用。

public void processRefreshEvent(ManagerEvent event){
//processing event
//...
//I'm done
notify();
}


public synchronized void refresh() throws Exception {
isRefreshing = true;
try {
manager.send(new refresh());
} catch (ManagerException e) {
isRefreshing = false;
}

try {
wait(5000);
} catch (InterruptedException e) {
} finally{
isRefreshing = false;
}
}

执行上面的代码时出现以下异常:

java.lang.IllegalMonitorStateException: current thread not owner
at java.lang.Object.wait(Native Method)
at Communicator.refresh(Communicator.java:203)
...

“等待”另一个线程完成的正确方法是什么。谢谢。

最佳答案

您需要在监视器上同步您的线程。例如(使用当前对象作为监视器):

public void processRefreshEvent(ManagerEvent event){
//processing event
//...
//I'm done
synchronized(this) {
notify(); // you are basically notifying any thread who has blocked
// on this monitor - in our case, the instance of this object
}
}


public synchronized void refresh() throws Exception {
isRefreshing = true;
try {
manager.send(new refresh());
} catch (ManagerException e) {
isRefreshing = false;
}

try {
synchronized(this) {
wait(5000); // wait will give up the monitor
}
} catch (InterruptedException e) {
} finally{
isRefreshing = false;
}
}

关于java - 如何处理java线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/774552/

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