Предпочитаемый способ ожидания на двух ExecutorServices? - PullRequest
0 голосов
/ 29 марта 2012

У меня есть два ExecutorServices, один для хранения производителей, а другой для потребителей. Я использую метод awaitTermination, который блокирует и нуждается в параметре времени ожидания. Но я хочу подождать на обоих ExecutorServices с одинаковым временем ожидания. Поскольку вызов awaitTermination блокируется, я не могу сделать:

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

Потому что это, в конце концов, подождет всего 8 часов. Что мне делать?

1 Ответ

4 голосов
/ 29 марта 2012

Если вы ожидаете обоих из них, просто подождите один из них с тайм-аутом в 4 часа, затем дождитесь другого с тем, сколько времени осталось.Как вы определяете, что вам решать - я, вероятно, отработаю желаемое время end на основе текущего времени перед первым вызовом awaitTermination, а затем выясню оставшееся время на основе разницымежду этим и текущим временем.

Из документации не ясно, что произойдет, если вы перейдете в отрицательное время - вам, вероятно, следует это изучить и потенциально принять меры предосторожности (например, если первый вызов заканчивается в ровно тайм-аут, и в итоге вы вычисляете второй тайм-аут через миллисекунду.)

...