0

2 つの ExecutorServices があります。1 つはプロデューサーを保持し、もう 1 つはコンシューマーを保持します。私は awaitTermination メソッドを使用していますが、これはブロックしており、タイムアウト パラメータが必要です。しかし、同じタイムアウトで両方の ExecutorServices を待ちたいと思います。awaitTermination 呼び出しがブロックされているため、次のことはできません。

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

最終的には、合計で 8 時間待機することになるからです。私は何をすべきか?

4

1 に答える 1

4

両方を待機している場合は、いずれかを 4 時間のタイムアウトで待機し、残りの時間でもう一方を待機します。それをどのように判断するかはあなた次第です - 私はおそらくへの最初の呼び出しの前に現在の時間に基づいて希望の終了awaitTermination時間を計算し、それと現在の時間の差に基づいて残りの時間を計算します。

負の時間を渡した場合に何が起こるかは、ドキュメントからは明らかではありません。おそらくそれを調査し、潜在的に予防策を講じる必要があります (たとえば、最初の呼び出しが正確にタイムアウトで終了し、1 ミリ秒後に 2 番目のタイムアウトを計算することになった場合)。 )。

于 2012-03-29T18:21:33.627 に答える