首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使所有latch.countdown()都被调用,程序仍继续执行

即使所有latch.countdown()都被调用,程序仍继续执行
EN

Stack Overflow用户
提问于 2015-05-26 12:43:48
回答 1查看 122关注 0票数 0

我有一个简单的模式:

代码语言:javascript
复制
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");

任务刚刚调用的

代码语言:javascript
复制
public void run(){
      System.out.println("working");
      latch.countDown();
}

即使死刑给了我:

代码语言:javascript
复制
working
working
working
working
done

整个程序继续执行!怎么会这样?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-26 13:05:11

你得关掉你的Executor

代码语言:javascript
复制
    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使用守护进程线程。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30458951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档