我正在为服务器编写一个侦听器线程,目前我正在使用:
while (true){
try {
if (condition){
//do something
condition=false;
}
sleep(1000);
} catch (InterruptedException ex){
Logger.getLogger(server.class.getName()).log(Level.SEVERE, null, ex);
}
}
使用上面的代码,我遇到了运行函数占用所有 cpu 时间循环的问题。睡眠功能有效,但它似乎是权宜之计,而不是解决方案。
是否有一些函数会阻塞,直到变量“条件”变为“真”?还是持续循环等待变量值改变的标准方法?
原文由 Rolan 发布,翻译遵循 CC BY-SA 4.0 许可协议
像这样轮询绝对是最不受欢迎的解决方案。
我假设您有另一个线程将执行某些操作以使条件为真。有几种方法可以同步线程。在您的情况下,最简单的方法是通过对象发出通知:
主线程:
其他线程:
syncObject
本身可以是一个简单的Object
。线程间通信还有许多其他方式,但使用哪一种方式取决于您具体在做什么。