fixedThreadPool
から呼び出し可能な関数のリストを呼び出す際に問題があります。すべての呼び出し可能コードが実行されますが、それらのうちのいくつかは異なるスレッドに同時にディスパッチされるように見えるので、実際には複数回呼び出されます。ExecutorService invokeAll()が呼び出されている呼び出し可能番号
try {
ExecutorService es = Executors.newFixedThreadPool(Environment.nThreads);
es.invokeAll(Environment.jobPool);
es.shutdown();
} catch (InterruptedException e) {
e.printStackTrace();
}
ExecutorServiceに渡すコレクションに同じタスクを複数回追加していないことは確かですか?また、実行中に例外をスローしないタスクもありますか? –
このコードに問題があるとは考えにくいです。 'Environment.jobPool'はどのように構築されていますか? –
これはjobPoolが作成されたコード部分です public static final ArrayList> jobPool = new ArrayList >(); ここにジョブが追加されます。 Environment.jobPool.add(Executors.callable(new Job(eval、validator))); @Andrei例外をスローしたときにも、呼び出し元が2回呼び出される方法はわかりません。私はコンソールですべての例外を印刷する傾向があるので、私は彼らがとにかく行ったとは思わない。 –
Renaud