JAVA—CountDownLatch

应用篇

CountDownLatch是一个java的同步工具类。

public static void main(String[] args) throws InterruptedException {
    int n = 100;
    CountDownLatch doneSignal = new CountDownLatch(n);
    Executor e = Executors.newFixedThreadPool(10);
    for (int i = 0; i < n; ++i) {
        e.execute(new WorkerRunnable(doneSignal, i));
    }
    doneSignal.await();
    System.out.println("Over");
    System.exit(0);
}

public static class WorkerRunnable implements Runnable {

    private final CountDownLatch doneSignal;
    private final int i;

    public WorkerRunnable(CountDownLatch doneSignal, int i) {
        this.doneSignal = doneSignal;
        this.i = i;
    }

    public void run() {
        System.out.println("工作中" + i  + ": " + System.currentTimeMillis());
        doneSignal.countDown();
    }
}

执行结果


可见CountDownLatch可以保证所有线程执行完毕后再退出程序。这个线程数和N的大小有关。
把N改为5,执行结果如下。System.exit改为如下。
System.exit(-1);

线程提前返回。countDown减1,当count为0的时候,结束等待。


进阶篇

为了更好的理解countDownLatch内部实现原理,我们将从源码解析的角度解读countDownLatch锁机制。

发表评论

电子邮件地址不会被公开。