我将一堆可运行对象放入了一个ExecutorService中:
// simplified content of main method
ExecutorService threadPool = Executors.newCachedThreadPool();
for(int i = 0; i < workerCount; i++) {
threadPool.execute(new Worker());
}
我希望我的程序/进程在所有工人完成后立即停止。但根据我的日志,需要额外20-30秒才能完成。实际上,工人们并没有分配任何资源,事实上,此时他们什么都不做。
别误解我,这对我来说不是一个关键问题,我只是想了解发生了什么,我想知道这是否是正常的行为。
ExecutorService
@alapeno。 - Graymain()
函数结束时终止。如果你指的是AWT线程,在没有可显示组件时它会终止。此外,在ExecutorService
中并没有后台线程在“运行”,它的线程池中除了这些线程之外没有其他线程;例如,在调用execute()
方法的线程中直接在该方法中将任务排队。 - Russell ZahniserThreadPoolExecutor
)会自动关闭,但除非它们是守护线程,否则池中的核心线程永远不会自行关闭。如果已提交任何任务,则必须等待缓存线程超时并被回收。@RussellZahniser - GrayExecutors.newCachedThreadPool()
,它的核心大小为0。 - Russell Zahniser