我有一个简单的模式:
int parallelism = 4; //4 tasks
ExecutorService executor = Executors.newCachedThreadPool();
CountDownLatch latch = new CountDownLatch(parallelism);
for(int i=0;i<parallelism;i++){
executor.execute(new MyTask());
}
latch.await();
System.out.println("done");任务刚刚调用的
public void run(){
System.out.println("working");
latch.countDown();
}即使死刑给了我:
working
working
working
working
done整个程序继续执行!怎么会这样?
发布于 2015-05-26 13:05:11
你得关掉你的Executor。
ExecutorService executor = Executors.newCachedThreadPool();
// ...
executor.shutdown();
while ( executor.awaitTermination(1, TimeUnit.SECONDS)) {
System.out.println("This is taking too long.");
}即使您的所有运行程序都已经完成,Executor仍然将线程保存在一个池中。这就是阻碍你离开的原因。直到所有非守护进程线程完成后,main线程才会退出。
另一种选择请参见Turning an ExecutorService to daemon in Java --使Executor使用守护进程线程。
https://stackoverflow.com/questions/30458951
复制相似问题