嘗試從fixedThreadPool
調用可調用列表時遇到問題。雖然所有可調用的命令都會執行,但其中一些可能同時被分派到不同的線程,因此它們實際上被稱爲不止一次。請參見下面的代碼:ExecutorService invokeAll()重複被調用的Callable
try {
ExecutorService es = Executors.newFixedThreadPool(Environment.nThreads);
es.invokeAll(Environment.jobPool);
es.shutdown();
} catch (InterruptedException e) {
e.printStackTrace();
}
您確定您沒有將相同任務添加到您傳遞給ExecutorService的集合多次?你也確定你的任務在運行期間沒有任何異常嗎? – 2012-03-05 12:26:12
很難想象這個問題出在這段代碼中。 「Environment.jobPool」是如何構建的? – 2012-03-05 12:27:42
這是創建jobPool的代碼片段 public static final ArrayList> jobPool = new ArrayList >(); 這是作業被添加到它的位置: Environment.jobPool.add(Executors.callable(new Job(eval,validator))); @Andrei我不明白如何調用一個可調用對象,即使在拋出異常時也會調用兩次。我不認爲他們做了,因爲我傾向於在控制檯中打印所有異常。 –
Renaud
2012-03-05 21:09:40