0

から callable のリストを呼び出そうとすると問題が発生しfixedThreadPoolます。すべての callable が実行されますが、それらの一部は異なるスレッドに同時にディスパッチされているように見えるため、実際には複数回呼び出されます。以下のコードを参照してください。

try {
    ExecutorService es = Executors.newFixedThreadPool(Environment.nThreads);
    es.invokeAll(Environment.jobPool);
    es.shutdown();
} catch (InterruptedException e) {
    e.printStackTrace();
}
4

2 に答える 2

0

Callableリスト内のいくつかのタスクが重複している可能性があります。すべての実装java.util.Setのメソッドを適切に実装してみてください。equalCallable

于 2012-03-05T12:28:08.947 に答える
0

Callable がキャッチされない例外をスローした場合、動作は未定義です。中断された例外の場合、たとえば ExecutorService を停止します。また、 incokeAll は Collection を受け入れるため、 ArrayList から HashSet を作成し、それを渡して、何も重複していないことを確認します

Set<?> set = new HashSet<?>(jobPool);

ExecutorService が同じ Callable を 2 回呼び出すだけではないと確信しています。

于 2012-03-06T07:41:07.133 に答える