【发布时间】:2016-09-29 14:36:00
【问题描述】:
考虑以下 Java 代码
void doSomething(Runnable r1, Runnable r2){
Executor executor = Executors.newSingleThreadExecutor();
executor.execute(r1);
executor.execute(r2);
}
当我调用 doSomething 方法时,会创建执行器并依次执行任务 r1 和 r2。
我的问题是:一旦两个任务 r1 和 r2 终止会发生什么?
我想executor对象会被垃圾回收,但我不知道它是否也会被关闭。如果executor为其执行创建了一个新线程,这个线程会不会导致资源泄露?
【问题讨论】:
-
您可以使用 ExecutorService,然后在提交任务执行后调用 shutdown。 ES 会等到任务完成后才会终止。
-
您也可以使用零核心线程的
ThreadPoolExecutor,以便在没有要运行的任务时回收线程。
标签: java multithreading executor