线程关闭后如何重用执行程序对象
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 具有此功能吗?
也许您可以重构您的程序,这样处理线程就不会关闭。您的父线程将数据交给子线程进行处理。他们处理它并等待更多数据。不要杀死线程或关闭数据进程之间的池。
我有一个 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 具有此功能吗?
也许您可以重构您的程序,这样处理线程就不会关闭。您的父线程将数据交给子线程进行处理。他们处理它并等待更多数据。不要杀死线程或关闭数据进程之间的池。