我们是否需要关闭ExecutorService fixedThreadPool

时间:2015-07-29 14:47:37

标签: java executorservice threadpoolexecutor

我在我的应用程序中使用ExecutorService创建了使用以下代码调用供应商websrvice的线程池。

  ExecutorService executor = Executors.newFixedThreadPool(getThreadPoolSize());
    for (int i = 0; i < list.size(); i++) {
                    Request ecpReq = list.get(i);           
                    thRespLst.add(executor.submit(new Task(ecpReq)));
                }

想知道我们是否需要关注线程池或其他东西,基本上我不想在生产环境中挂线程。

2 个答案:

答案 0 :(得分:5)

  • 的newFixedThreadPool
  

public static ExecutorService newFixedThreadPool(int nThreads)

     

创建一个重用固定数量的线程的线程池   关闭共享的无界队列。在任何时候,最多nThreads线程   将是主动处理任务。如果提交了其他任务   当所有线程都处于活动状态时,它们将在队列中等待直到a   线程可用。如果任何线程由于故障期间终止而终止   在关机之前执行,如果需要,新的将取代它   执行后续任务。 池中的线程将一直存在   明确关闭

Javadoc中。

Here一个很好的解释。

答案 1 :(得分:-2)

FinalizableDelegatedExecutorServiceThreadPoolExecutor覆盖finalize()以执行关闭。

/**
* Invokes {@code shutdown} when this executor is no longer
* referenced and it has no threads.
*/
protected void finalize() {
    shutdown();
}

实际上,我认为没有理由明确关闭ExecutorService