0

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

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

因为这最终会等待总共 8 个小时。我该怎么办?

4

1 回答 1

4

如果您正在等待他们两个,只需等待其中一个超时 4 小时,然后等待另一个,无论剩余多少时间。您如何确定这取决于您 - 我可能会根据第一次调用 之前的当前时间计算出所需的结束awaitTermination时间,然后根据该时间与当前时间之间的差异计算剩余时间。

从文档中不清楚如果您通过负时间会发生什么 - 您可能应该对此进行调查,并可能采取预防措施(例如,如果第一次调用恰好在超时完成,然后您最终在一毫秒后计算第二次超时)。

于 2012-03-29T18:21:33.627 回答