我有一个并行处理数据块的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对象及其中的线程而不是重新实例化?
或许,是否有第三方Executor API具有此功能?
答案 0 :(得分:1)
也许您可以重构您的程序,以便处理线程不会关闭。您的父线程提供要处理的子线程数据。他们处理它并等待更多数据。不要在数据进程之间杀死线程或关闭池。