尝试从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