美文网首页
CountDownLatch--倒计数器

CountDownLatch--倒计数器

作者: 鉴闻俗说 | 来源:发表于2018-08-02 15:57 被阅读0次

1、引入CountDownLatch

CountDownLatch是一个非常实用的多线程控制工具类。这个工具类通常用来控制线程等待,它可以让某一个线程等待直到倒计数结束,再开始执行。

对于到计数器,一种典型的场景就是火箭发射。在火箭发射前,为了保证万无一失,往往还要进行各项设备、仪器的检查。只有等待所有的检查完毕后,引擎才能点火。这种场景就非常适合使用CountDownLatch。它可以使得点火线程等待所有检查线程全部完工后,再执行。

CountDownLatch的构造函数接收一个整数作为参数,即当前这个计数器的计数个数。

public CountDownLatch(int count)

2、CountDownLatch的主要逻辑方法

public void await() throws InterruptedException
public boolean await(long timeout, TimeUnit unit) throws InterruptedException
public void countDown()
public long getCount()
  • await()方法:让当前线程进行等待,直到的CountDownLatch计数值变为0,或者当前线程被中断。
  • await(long timeout, TimeUnit unit)方法:让当前线程进行等待,直到的计数值变为0,或者等待时间用完,或者当前线程被中断。
  • countDown()方法:减少CountDownLatch计数值,如果计数达到零则释放所有等待的线程。
  • getCount():返回当前CountDownLatch的计数值。

3、简单演示CountDownLatch的使用CountDownLatch

演示代码如下:

public class CountDownLatchDemo implements Runnable
{
    static final CountDownLatch end = new CountDownLatch(10);
    static final CountDownLatchDemo demo = new CountDownLatchDemo();


    @Override
    public void run()
    {
        try
        {
            //模拟检查任务
            Thread.sleep(new Random().nextInt(10) * 1000);
            System.out.println("check complete");
            //通知CountDownLatch一个线程已经完成了任务。倒计数器可以减1了
            end.countDown();
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws InterruptedException
    {
        ExecutorService exec = Executors.newFixedThreadPool(10);
        for (int i = 0; i < 10; ++i)
        {
            exec.submit(demo);
        }

        //等待检查,要求主线程等待所有检查任务全部完成
        end.await();
        //发射火箭
        System.out.println("Fire");
        exec.shutdown();
    }
}

上述代码中生成一个CountDownLatch实例,计数数量为10.这表示需要有10个线程完成任务,等待在CountDownLatch上的线程才能继续执行。其中 end.countDown()调用CountDownLatch的countdown()方法,也就是通知CountDownLatch,一个线程已经完成任务,倒计数器可以减1了。其中 end.await()调用CountDownLatch的await()方法,要求主线程等待所有10个检查任务全部完成。待10个任务全部完成后,主线程才能继续执行。

总的来说就是主线程在CountDownLatch上等待,当所有检查任务全部完成后,主线程方能继续执行

相关文章

  • CountDownLatch--倒计数器

    1、引入CountDownLatch CountDownLatch是一个非常实用的多线程控制工具类。这个工具类通常...

  • jmeter计数器的使用

    1、计数器简介 2、添加计数器 3、计数器界面如下: 1(starting value):给定计数器的起始值、初始...

  • CountDownLatch

    计数器,指定计数器的大小,当执行latch.countDown()后计数器减一,当计数器等于0时才能执行latch...

  • 【2019-05-09】MapReduce的特性

    计数器内置计数器 任务计数器采集任务的相关信息,每个作业的所有任务的结果会被聚集起来。任务计数器由其关联任务维护,...

  • MapReduce(6)特性

    ##08.20 1、计数器 1.1、MapReduce包含的高级特性,计数器,数据集的排序和连接 1.2、计数器作...

  • CSS进阶八:counter(),box-sizing,appe

    css中的计数器 counter-reset:name number 设置或重置一个计数器 name 计数器名称 ...

  • 命题-十三章-填空

    定时/计数器的计数方式_____ 答案 可预置数,加法计数器 定时/计数器预置数的计算方法____ 答案 最大...

  • Java虚拟机的运行时数据区域

    Java虚拟机的运行时数据区域有程序计数器、虚拟机栈、本地方法栈、堆和方法区。 程序计数器 程序计数器,程序计数器...

  • Java CountDownLatch

    CountDownLatch 通过初始化一个计数器,通过countDown减少计数器,当计数器变成0时,才开始执行...

  • KubeEdge官方示例运行成功_Counter Demo 计数

    运行KubeEdge官方示例_Counter Demo 计数器 KubeEdge Counter Demo 计数器...

网友评论

      本文标题:CountDownLatch--倒计数器

      本文链接:https://www.haomeiwen.com/subject/ogxsvftx.html