我试图理解countDownLatch和我有这个程序,但我不知道为什么我的程序不返回和没有完成。
package countDownLatches;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
class Processor implements Runnable {
CountDownLatch latch;
public Processor(CountDownLatch latch) {
this.latch = latch;
}
public void run() {
System.out.println("thread started: ");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
latch.countDown();
}
}
public class App {
public static void main(String args[]) {
CountDownLatch latch = new CountDownLatch(3);
ExecutorService executorService = Executors.newFixedThreadPool(3);
for (int i = 0; i < 3; i++) {
executorService.submit(new Processor(latch));
}
try {
latch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("task completed");
}
}发布于 2014-03-16 16:34:58
你需要正确关闭您的执行者服务。否则,它将无限期地等待新任务。
添加:
executorService.shutdown();在此之前:
System.out.println("task completed");我认为,之所以这样做的主要原因是executorService可能会接收来自多个线程的任务( main除外),那么--当主线程中没有更多的操作时,它为什么要停止呢?是的,我相信,它不应该。
发布于 2014-03-16 16:33:09
你得关掉遗嘱执行人的服务。在for循环之后添加这一行:
executorService.shutdown();等待所有主动执行任务终止的另一种方法是
executorService.awaitTermination();您可以在ExecutorService Javadoc中阅读更多内容。
https://stackoverflow.com/questions/22439547
复制相似问题