避免占用CPU时间(stopCondition)

时间:2019-04-11 09:57:58

标签: java multithreading

我有以下代码:

public static void main(String[] args) {
    ...
    while(condition.continueListening()) {
    }
    log.info("Finished");
}

条件对象创建自己的线程,该条件满足一个条件后,使方法continueListening,以返回false。

问题是,我希望主线程在该方法返回false之前不结束,以及我实现它的方式,这是通过使用这种结构对CPU来说相当“困难”的,您是否知道其他任何内容更好的方法?

1 个答案:

答案 0 :(得分:0)

什么是continueListening检查?如果它只是一个随机状态,那么您真的没有一个好的选择,最好的办法是使线程休眠一会儿,例如在while循环中等待半秒钟。

但是,如果您可以更改continueListening,则可以将其 block 阻止,直到事件发生并且事件应该继续。 Java为此提供了许多选择,其中一些可能是:

  • 您可以使用Thread.join()等待其他线程退出。
  • 等待线程通知某个对象它已完成某件事(加入的想法类似,但线程可以继续执行其他操作)。 Object.wait()Object.notify()
  • 使用Java“执行程序”,类似于等待线程退出,但是内置了传递结果和错误的方法,并允许Java使用诸如线程池之类的东西。参见ExecutorServiceFuture.get()
  • 其他各种等待事件对象或队列。例如使用FuturePromiseBlockingQueue手动进行操作。