线程关闭后如何重用执行程序对象

How to reuse an executor objects after threads shutdown

我有一个 Java 7 程序,它并行处理数据块,目前我使用执行程序服务 API 创建线程:

pool = Executors.newFixedThreadPool(size > 0 ? size : THREAD_MAX);

然后我等待所有线程完成:

    try {
        pool.shutdown();
        // TODO 60 seconds sufficient to process a route?
        pool.awaitTermination(60L, TimeUnit.SECONDS);
    } catch (InterruptedException e) {
        e.printStackTrace();
        pool.shutdownNow(); // TODO consider rerunning handleHashes!
    } finally {
        release();
    }

但是一旦终止发生,我需要重新实例化执行器。在处理完前一个数据块之后,我更愿意重用已经创建的线程。这将使我更容易进行分析。

.shutdown() 之后,我如何重用 Executor 对象和其中的线程而不是重新实例化?

也许,有第 3 方执行器 API 具有此功能吗?

也许您可以重构您的程序,这样处理线程就不会关闭。您的父线程将数据交给子线程进行处理。他们处理它并等待更多数据。不要杀死线程或关闭数据进程之间的池。