如果我像这样实例化一个执行器:
private final Executor executor = Executors.newFixedThreadPool(2);
然后执行一些代码,如下所示:
executor.execute(() -> {
doSomeThingHere();
});
线程池会发生什么情况,它会在代码执行后被销毁吗?执行器没有任何关闭方法?每次运行应用程序的过程时,我都会在应用程序中遇到线程的积累。这可能不是原因,但我想了解这一点并排除它。目前,每当我想在后台运行代码时,我都会以这种方式实例化一个新的执行器。
使用ExecutorService
而不是Executor
,因为newFixedThreadPool()
返回一个ExecutorService
并且该方法shutdown
。
如果执行程序是使用创建守护程序线程的ThreadFactory
创建的(请参阅 setDaemon),并且没有其他非守护程序线程在运行,如主线程或 EDT,则虚拟机将被终止(停止所有线程)