我在我的应用程序中使用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)));
}
想知道我们是否需要关注线程池或其他东西,基本上我不想在生产环境中挂线程。
答案 0 :(得分:5)
public static ExecutorService newFixedThreadPool(int nThreads)
创建一个重用固定数量的线程的线程池 关闭共享的无界队列。在任何时候,最多nThreads线程 将是主动处理任务。如果提交了其他任务 当所有线程都处于活动状态时,它们将在队列中等待直到a 线程可用。如果任何线程由于故障期间终止而终止 在关机之前执行,如果需要,新的将取代它 执行后续任务。 池中的线程将一直存在 明确关闭。
Javadoc中。
Here一个很好的解释。
答案 1 :(得分:-2)
FinalizableDelegatedExecutorService
和ThreadPoolExecutor
覆盖finalize()
以执行关闭。
/**
* Invokes {@code shutdown} when this executor is no longer
* referenced and it has no threads.
*/
protected void finalize() {
shutdown();
}
实际上,我认为没有理由明确关闭ExecutorService
。