我有以下一段代码:
public static void main(String[] args) {
...
while(condition.continueListening()) {
}
log.info("Finished");
}
条件对象创建自己的线程,在满足一个条件后,使方法继续侦听,返回 false。
问题是,我希望主线程在该方法返回 false 之前不会完成,而我实现它的方式,正是通过使用这种结构,对于 CPU 来说非常"困难",你知道还有其他方法可以更好地工作吗?
什么是continueListening
检查?如果它只是一个随机的状态,你真的没有一个好的选择,你能做的最好的事情就是让你的线程休眠一会儿,比如在 while 循环中睡半秒钟。
但是如果你可以 更改continueListening
,那么您可以阻止它,直到事件发生并且它应该继续。Java对此有很多选择,有些可能是:
- 您可以使用
Thread.join()
等待另一个线程退出。
等待线程通知 - 某个对象它已经做了一些事情(加入的想法类似,但线程可以继续并做其他事情(。
Object.wait()
,Object.notify()
。
使用 Java - "executor",这类似于等待线程退出,但内置了传输结果和错误的方法,并允许 Java 使用线程池之类的东西。查看
ExecutorService
和Future.get()
- 各种其他可等待的事件对象或队列。例如手动使用
Future
和Promise
或BlockingQueue
。