为什么Java程序没有终止

为什么Java程序没有终止,java,concurrency,future,executors,Java,Concurrency,Future,Executors,下面的代码检查Java并发框架中ExecutorCompletionService的使用情况(使用的IDE是Netbeans) 但该计划并未终止。为什么? 代码: import java.util.concurrent.Callable; 导入java.util.concurrent.CompletionService; 导入java.util.concurrent.ExecutionException; 导入java.util.concurrent.Executor; 导入java.util.

下面的代码检查
Java并发
框架中
ExecutorCompletionService
的使用情况(使用的IDE是Netbeans)

但该计划并未终止。为什么?

代码:
import java.util.concurrent.Callable;
导入java.util.concurrent.CompletionService;
导入java.util.concurrent.ExecutionException;
导入java.util.concurrent.Executor;
导入java.util.concurrent.ExecutionCompletionService;
导入java.util.concurrent.Executors;
公共类测试未来{
公共静态void main(字符串…参数)抛出InterruptedException、ExecutionException{
Executor ex=Executors.newCachedThreadPool();
CompletionService cs=新的ExecutionCompletionService(ex);
提交(新工人());
提交(新工人());
提交(新工人());
对于(int i=0;i<3;i++){
长l=cs.take().get();
//利用结果
系统输出打印LN(l);
}
}
}
类工作者实现了可调用的{
@凌驾
public Long call()引发异常{
//完成一些任务并返回
返回系统.currentTimeMillis();
}
}

main
完成时,线程池中的线程将继续运行。这就是JVM不会关闭的原因。您需要使用守护进程线程,或者显式关闭池

下面是一个例子:

ExecutorService ex = Executors.newCachedThreadPool();
// do all your submission work here
ex.shutdown();

您需要暂停(关闭)线程池,或将线程指定为守护进程。请使用
ExecutorService#shutdown()
谢谢。在我在互联网上看到的示例中,他们从未提到关闭线程池,示例使用的是
Executor
,它没有
shutdown/halt
行为:另外,如果需要阻塞直到线程实际停止,则等待Termination()-shutdown()立即返回。
ExecutorService ex = Executors.newCachedThreadPool();
// do all your submission work here
ex.shutdown();