如果在java

时间:2016-04-19 08:45:18

标签: java multithreading executorservice threadpoolexecutor

目前我正在使用Java中的ExecutorService类和newFixedThreadPool命令处理线程作业。 当我在声明shutdown()实例后忘记执行ExecuterService命令时,我的程序从未关闭。 我猜测ExecuterService可能有一个内部命令关闭其线程,因为它实现了Executor接口,它没有明确的shutdown()命令。 我想知道ExecutorService类和相关线程内部会发生什么,例如线程何时死亡,以及忘记shutdown()命令会发生什么。 谢谢。

2 个答案:

答案 0 :(得分:1)

Executors.newFixedThreadPool创建一个具有给定数量" core"的线程池。线程,在线程池上调用shutdown()方法之前永远不会关闭。

查看finalize method of ThreadPoolExecutor(通过调用Executors.newFixedThreadPool返回的具体类):

protected void finalize() {
  shutdown();
}

因此,如果ExecutorService实例符合垃圾收集条件,则在调用finalize()时将关闭它。

但是,与所有与finalize()方法相关的事情一样,你不应该依赖于在任何特定时间(如果有的话)被调用。

答案 1 :(得分:0)

newFixedThreadPool
 池中的线程将一直存在,直到明确关闭为止。
因此,除非你明确地调用shutdown(),否则执行程序服务对象很有可能有资格进行垃圾收集,Thread可能仍然具有执行程序的引用。
默认情况下,JVM会关闭属于主线程池的所有线程只要。