【发布时间】:2015-06-04 01:55:21
【问题描述】:
这个超级简单的应用程序打印“Hello”但没有完成。我完全没有理由这样做。
JavaDoc,部分定稿,说
程序中不再引用且没有剩余线程的池将自动关闭。
tpe 显然没有被引用,这意味着线程没有完成。但我不明白为什么。谁能解释一下?
这种情况的解决方法是在main的最后调用shutdown(),但是我的实际应用比较复杂。新的工作是在 Runnables 内部生成的,所以我不知道什么时候会处理所有内容。
那么,我需要弄清楚何时调用关机吗?或者是否有可能以某种方式指定,当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");
}
});
}
}
【问题讨论】:
-
继续阅读直到最后。您必须确保未使用的线程死亡。
标签: java multithreading concurrency java.util.concurrent threadpoolexecutor