有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java FixedThreadPool未正确执行

我已经创建了大小为100的新FixedThreadPool,并在其上启动了500个线程。 所有线程都正确启动,并且都需要足够的时间。但执行器只是关闭了一些线程生成的输出,而大多数都没有。 我还使用max value调用了shutdown()和waittermination(),因此它必须等到所有线程完成。 当任务数量较少时(例如20或30个任务,池大小与100个任务相同),这种方法可以很好地工作。 线程中的逻辑是对列表进行操作,并将该列表转换为xlsx文件。 如果有人面临类似问题,请分享任何信息


共 (1) 个答案

  1. # 1 楼答案

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

    • 给未来打电话。在.submit(task)返回的每个Future上获取()以查看任何错误或错误
    • 您必须捕获并记录try { } catch (Throwable t)块中的所有错误

    最有可能发生的错误是导致所有任务失败

    顺便说一句,如果你有一个CPU限制的任务,线程的最佳数量可能是你的CPU数量

    The logic in thread is to operate over list and convert

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

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