等待两个ExecutorServices的首选方式?

时间:2012-03-29 18:17:33

标签: java multithreading service concurrency executor

我有两个ExecutorServices,一个用于保存生产者,另一个用于保存消费者。我正在使用awaitTermination方法,它阻塞并需要一个超时参数。但我想在两个ExecutorServices上等待相同的超时。由于awaitTermination调用是阻塞的,我不能这样做:

    this.producersExecutorService.awaitTermination(4, TimeUnit.HOURS);
    this.consumersExecutorService.awaitTermination(4, TimeUnit.HOURS);

因为那样最终会等待8个小时。我该怎么办?

1 个答案:

答案 0 :(得分:4)

如果你正在等待两个,只需要等待其中任何一个超时4小时,然后等待另一个,但剩下的时间有多长。你如何确定这取决于你 - 我可能会根据第一次调用awaitTermination之前的当前时间计算出所需的结束时间,然后根据剩余时间计算出剩余时间关于它与当前时间之间的差异。

从文档中不清楚如果你传递一个负面时间会发生什么 - 你应该调查一下,并可能采取预防措施(例如,如果第一次调用在完全超时完成,然后你最终计算了一个毫秒后的第二个超时。)