避免一段时间(停止条件)消耗 CPU



我有以下一段代码:

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 使用线程池之类的东西。查看ExecutorServiceFuture.get()
  • 各种其他可等待的事件对象或队列。例如手动使用FuturePromiseBlockingQueue

最新更新