CountDownLatch 使用

java.util.concurrent.CountDownLatch是一个并发结构,它允许一个或多个线程等待一组给定的操作完成。CountDownLatch用给定的计数进行初始化。该计数通过调用countDown()方法递减。等待此计数达到零的线程可以调用await()方法之一。调用await()会阻塞该线程,直到计数达到零。

下面是一个简单的例子。在Decrementer在CountDownLatch上调用countDown()3次之后,等待的Waiter将从await()调用中释放。

CountDownLatch latch = new CountDownLatch(3);

Waiter      waiter      = new Waiter(latch);
Decrementer decrementer = new Decrementer(latch);

new Thread(waiter)     .start();
new Thread(decrementer).start();
Thread.sleep(4000);
public class Waiter implements Runnable{

    CountDownLatch latch = null;

    public Waiter(CountDownLatch latch) {
        this.latch = latch;
    }

    public void run() {
        try {
            latch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Waiter Released");
    }
}
public class Decrementer implements Runnable {

    CountDownLatch latch = null;

    public Decrementer(CountDownLatch latch) {
        this.latch = latch;
    }

    public void run() {

        try {
            Thread.sleep(1000);
            this.latch.countDown();

            Thread.sleep(1000);
            this.latch.countDown();

            Thread.sleep(1000);
            this.latch.countDown();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

[原文](http://tutorials.jenkov.com/java-util-concurrent/countdownlatch.html

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 译序 本指南根据 Jakob Jenkov 最新博客翻译,请随时关注博客更新:http://tutorials.j...
    高广超阅读 10,730评论 1 68
  • CountDownLatch是JAVA提供在java.util.concurrent包下的一个辅助类。 内部有一个...
    大华夏阅读 3,674评论 0 1
  • 概述 JDK中提供了一些用于线程之间协同等待的工具类,CountDownLatch和CyclicBarrier就是...
    winwill2012阅读 5,536评论 0 9
  • 悄悄别离 匆匆追忆 只言无痕话薄情 追往昔 叹情仇 却道峨眉两清山 眯眼梦 捻芷花 清堂白梦好无暇 莫回首 坠离愁...
    双丝芊芊节阅读 1,742评论 0 3
  • 遇到任何事情和人,都要以自己的状态为中心。慢慢吸收有营养的东西,不要乱了阵脚。不要浪费心力在外物和评价他人上面。要...
    喜之郎_951d阅读 1,819评论 0 0

友情链接更多精彩内容