加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

JUC 一 CountDownLatch

发布时间:2020-12-15 07:57:01 所属栏目:Java 来源:网络整理
导读:java.util.concurrent 介绍 CountDownLatch 是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待 CountDownLatch countDownLatch = new CountDownLatch(int count); boolean await(long timeout,TimeUnit unit) 能够阻塞

java.util.concurrent

介绍

CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待

  1. CountDownLatch countDownLatch = new CountDownLatch(int count);
  2. boolean await(long timeout,TimeUnit unit)能够阻塞线程,直到调用N次countDownLatch.countDown()方法才立刻返回true值,释放线程。使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断或超出了指定的等待时间。
  3. void countDown()可以在多个线程中调用 ,计算调用次数是所有线程调用次数的总和。如果计数到达零,则释放所有等待的线程。如果当前计数大于零,则将计数减少。

调用了countDown()方法,在当前计数到达零之前,await()方法会一直受阻塞。之后,会释放所有等待的线程,await()的所有后续调用都将立即返回true

使用场景

  1. 在一些应用场合中,需要等待某个条件达到要求后才能做后面的事情
  2. 当线程都完成后触发事件,以便进行后面的操作。

示例

public class CountDownLatch {
    public static void main(String[] args) {

        final CountDownLatch latch = new CountDownLatch(10);

        Demo ld = new Demo(latch);

        // 创建10个线程
        for (int i = 0; i < 10; i++) {
            new Thread(ld).start();
        }

        latch.await();

        System.out.println("该我了");
    }
}

class Demo implements Runnable {
    private CountDownLatch latch;

    // 有参构造器
    public Demo(CountDownLatch latch) {
        this.latch = latch;
    }

    public void run() {
        synchronized (this) {
            latch.countDown();
        }
    }
}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读