1

コア、最大、タイムアウト、時間単位、および境界付きキューで構成されたThreadPoolExecutorで、呼び出しで指定されたタイムアウトの長さと単位を使用してinvokeAllおよびinvokeAnyを呼び出すと、タスクの実行時にエグゼキューターのタイムアウト設定がオーバーライドされますか? これは、invokeAll の場合、返されたフューチャの1 つでgetメソッドを使用するときに適用されます (get で追加のタイムアウトを指定できます)。invokeAny の場合、呼び出し自体に適用されます。

ExecutorService threadPool = new ThreadPoolExecutor(coreSize, maxSize, poolTO, tu, new ArrayBlockingQueue<Runnable>(queueSize));

...そして、この threadPool オブジェクトを含むクラスでは、submit、invokeAll、および invokeAny を公開します。後者の 2 つは、threadPool の構築に使用したものと同じものを使用することを選択しているため、タイムアウト設定を公開しません。 . 私の小さなシングルトン プロキシ ラッパー クラスでこれらを公開すると、上記のコンストラクターで定義されたタイムアウト設定がオーバーライドされるかどうかを質問します。

4

1 に答える 1

1

ThreadPoolExecutor タイムアウトは実際には、プールをコア サイズに縮小する前に TimeUnit の長さを待機するために使用されるキープアライブ値ですが、invokeAll および invokeAny タイムアウトは、失敗する前にこれらのメソッドで実行が発生するのを待機する時間です。

于 2013-08-28T01:55:20.523 に答える