【发布时间】:2012-03-05 12:21:46
【问题描述】:
我在尝试从 fixedThreadPool 调用可调用对象列表时遇到问题。虽然所有可调用对象都将执行,但其中一些似乎同时被分派到不同的线程,因此实际上它们被多次调用。请看下面的代码:
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我看不到即使抛出异常也会调用两次可调用对象。我认为他们无论如何都不会这样做,因为我倾向于在控制台中打印所有异常。
标签: java multithreading duplicates executorservice executor