Java 等待两项服务的首选方式?

Java 等待两项服务的首选方式?,java,multithreading,service,concurrency,executor,Java,Multithreading,Service,Concurrency,Executor,我有两种服务,一种是为生产者服务,另一种是为消费者服务。我使用的是waittermination方法,它是阻塞的,需要一个timeout参数。但我想在两个Executor服务上等待相同的超时。由于终止呼叫被阻塞,我无法执行以下操作: this.producersExecutorService.awaitTermination(4, TimeUnit.HOURS); this.consumersExecutorService.awaitTermination(4, TimeUnit

我有两种服务,一种是为生产者服务,另一种是为消费者服务。我使用的是waittermination方法,它是阻塞的,需要一个timeout参数。但我想在两个Executor服务上等待相同的超时。由于终止呼叫被阻塞,我无法执行以下操作:

    this.producersExecutorService.awaitTermination(4, TimeUnit.HOURS);
    this.consumersExecutorService.awaitTermination(4, TimeUnit.HOURS);
因为那最终要等8个小时。我该怎么办呢?

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

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

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


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

我喜欢此解决方案。它不太漂亮,但它会做的!我喜欢这个解决方案。它不太漂亮,但它会做的!您是否可以使用两个围绕同一执行器的ExecutorCompletionServices?这将解决问题,因为您可以只关闭一个执行器。当然,这可能会导致其他问题-生产者不一定会在消费者之前关闭您是否可以使用两个围绕同一个执行者的ExecutorCompletionServices?这将解决问题,因为您可以只关闭一个执行器。当然,这可能会导致其他问题——生产商不一定会在消费者面前关门大吉