2022更文挑战25-java并发关键字:countDownLatch

200 阅读2分钟

「这是我参与2022首次更文挑战的第25天,活动详情查看:2022首次更文挑战」。

java并发关键字:countDownLatch

前文

本文内容为个人对于java中并发关键字countDownLatch的一些理解及总结,其中难免不准确之处,还请见谅。

并发关键字countDownLatch

countDownLatch是java并发包中的一个关键字,它的主要作用是对于线程执行的控制。按照注释中的定义来讲,这个关键字允许一个或多个线程进行等待,直到若干操作被执行完成才继续执行。以这种方式该关键字进行了线程执行顺序的限制。

下面来看一下这个关键字的具体用法。首先需要在线程执行前,进行该关键字的初始化,并传入线程的数量。该数量表示直到满足数量的线程执行完毕,才会进行后续的代码执行。在每个线程中,需要调用countDown方法,该方法用来控制等待尚未执行线程数目的数量剩余量。每次该方法被调用,数量即进行减一操作。当数量执行完毕后即开始执行后续代码。在后续的代码执行前,需要调用await方法,表示阻塞在此处等待线程执行完毕。当记录等待的数目等于零时,才会进行后续代码的执行。除了这种情况,只有当其他线程中断了当前线程,或者初始化时传入的时间限制到达时也会进行后续代码的执行。而该方法传入的时间,便是用于防止由于部分线程进入死循环等情况,导致的后续程序无法继续执行,出现程序中断的问题。

简单来看一个应用的代码:

public static void main(String[] args) throws InterruptedException {
    CountDownLatch countDownLatch = new CountDownLatch(2);
    Thread thread = new Thread(() ->{
        System.out.println("thread 1 start =====");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        countDownLatch.countDown();
    });
    thread.start();
    Thread thread2 = new Thread(() -> {
        System.out.println("thread 2 start =====");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        countDownLatch.countDown();
    });
    thread2.start();
    countDownLatch.await();
    System.out.println("两个线程执行结束");
}

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。