ade*_*kcz 2 java concurrency multithreading java.util.concurrent threadpoolexecutor
这个超级简单的应用程序打印"Hello",但没有完成.我完全没有理由这样做.
JavaDoc,部分定稿,说
程序中不再引用且没有剩余线程的池将自动关闭.
tpe
显然没有引用,这意味着线程没有完成.但我不明白为什么.有人能解释一下吗
在这种情况下的解决方案是在main结束时调用shutdown(),但我的实际应用程序更复杂.Runnables内部生成了新工作,所以我不知道什么时候会处理所有内容.
那么,我是否需要确定何时调用shutdown?或者是否有可能以某种方式指定,当tpe
队列为空时,它应该自行关闭?
public class JavaApplication5 {
public static void main(String[] args) {
ThreadPoolExecutor tpe = new ThreadPoolExecutor(5, 15, 10, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
tpe.execute(new Runnable() {
@Override
public void run() {
System.out.println("Hello");
}
});
}
Run Code Online (Sandbox Code Playgroud)
}
当您的main方法完成时,您的执行程序没有任何任务,但仍然有线程在运行.
在提交任何任务之前,将标志allowCoreThreadTimeout设置为true.然后,当执行程序在主方法完成时超出范围,并且所有任务完成时,线程将被终止.请参阅ThreadPoolExecutor API文档中的Finalization:
程序中不再引用且没有剩余线程的池将自动关闭.如果您希望确保即使用户忘记调用shutdown()也会回收未引用的池,那么您必须通过设置适当的保持活动时间,使用零核心线程的下限和/或来安排未使用的线程最终死亡设置allowCoreThreadTimeOut(boolean).
归档时间: |
|
查看次数: |
682 次 |
最近记录: |