我有两个ExecutorServices,一个用于保存生产者,另一个用于保存消费者。我正在使用awaitTermination方法,它阻塞并需要一个超时参数。但我想在两个ExecutorServices上等待相同的超时。由于awaitTermination调用是阻塞的,我不能这样做:
this.producersExecutorService.awaitTermination(4, TimeUnit.HOURS);
this.consumersExecutorService.awaitTermination(4, TimeUnit.HOURS);
因为那样最终会等待8个小时。我该怎么办?
答案 0 :(得分:4)
如果你正在等待两个,只需要等待其中任何一个超时4小时,然后等待另一个,但剩下的时间有多长。你如何确定这取决于你 - 我可能会根据第一次调用awaitTermination
之前的当前时间计算出所需的结束时间,然后根据剩余时间计算出剩余时间关于它与当前时间之间的差异。
从文档中不清楚如果你传递一个负面时间会发生什么 - 你应该调查一下,并可能采取预防措施(例如,如果第一次调用在完全超时完成,然后你最终计算了一个毫秒后的第二个超时。)