0

尝试从fixedThreadPool. 虽然所有可调用对象都将执行,但其中一些似乎同时被分派到不同的线程,因此实际上它们被多次调用。请看下面的代码:

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

2 回答 2

0

如果 Callable 抛出未捕获的异常,则行为未定义。例如,对于停止 ExecutorService 中的中断异常。此外,由于 incokeAll 接受一个 Collection ,从你的 ArrayList 构建一个 HashSet 并传递它只是为了确保你没有任何重复的东西

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

我很确定 ExecutorService 不只是调用同一个 Callable 两次。

于 2012-03-06T07:41:07.133 回答
0

您可能已经重复Callable了列表中的一些任务。尝试使用java.util.Set正确实现equal每个Callable实现的方法。

于 2012-03-05T12:28:08.947 回答