gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:18:29 25 4
gpt4 key购买 nike

我有这个简单的架构:

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");

Task 只是调用的地方

public void run(){
System.out.println("working");
latch.countDown();
}

尽管执行给了我:

working
working
working
working
done

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

最佳答案

您需要关闭您的执行器

    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使用守护线程。

关于java - 即使所有的latch.countdown()都被调用,程序仍继续执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30458951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com