FixedThreadPool无法正常执行

时间:2016-07-20 12:48:27

标签: java threadpoolexecutor

我创建了大小为100的newFixedThreadPool并在其上启动了500个线程。 所有线程都正确启动,所有线程都需要花费足够的时间。但是然后执行器只是关闭了一些线程产生的输出,而其中大多数没有。 我已经使用max值调用了shutdown()和awaitTermination(),因此必须等到所有线程都完成。 当任务数量较少(如20或30,相同的池大小为100)时,此方法可以正常工作。 线程中的逻辑是在列表上操作并将该列表转换为xlsx文件。 如果有人遇到类似问题,请分享任何信息。

1 个答案:

答案 0 :(得分:1)

向ExecutorService提交任务的一个常见错误是忽略发生的任何错误。你必须要么;

  • .submit(task)返回的每个Future上调用Future.get()以查看任何错误或
  • 您必须捕获并记录try { } catch (Throwable t)块中的所有错误。

很可能发生错误,导致所有任务失败。

BTW如果您有CPU绑定任务,最佳线程数可能是您拥有的CPU数。

  

线程中的逻辑是在列表上操作并转换

更简单的方法可能是使用parallelStream,例如

listToProcess.parallelStream()
             .map(l -> process(l))
             .forEach(row -> save(row));