CountDownLatch使用

作者: 大华夏 | 来源:发表于2017-07-01 22:46 被阅读56次

CountDownLatch是JAVA提供在java.util.concurrent包下的一个辅助类。

内部有一个计数器

  1. 计数器的操作是原子操作,即同时只能有一个线程去操作这个计数器。
  2. CountDownLatch通过构造函数传入计数器的初始化值
  3. 调用者可以通过调用CounDownLatch对象的cutDown()方法,来使计数减1
  4. 如果某线程调用了CountDownLatch对象上的await()方法,那么此调用线程将一直阻塞在这里,直到别的线程通过cutDown方法,将计数减到0,才可以继续执行

一个使用示例

我们假设在生产线上要生产一台电脑(由主板、显示器、内存、显卡、CPU、键盘、鼠标、机箱8个部分组成),电脑的各部件由不同的工作人员生产完成,最后在生产线上把各部件组装完成一台电脑

public class Worker implements Runnable {
    
    private static final Random random = new Random();
    
    private String spareParts;
    
    private CountDownLatch countDownLatch;
    public Worker(String spareParts,CountDownLatch countDownLatch){
        this.spareParts = spareParts;
        this.countDownLatch = countDownLatch;
    }
    public void run() {
        try {
            Thread.sleep(random.nextInt(10000));
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("完成部件["+spareParts+"]生产!!");
        countDownLatch.countDown();
    }
}
public class ProductionLine {

    public static void main(String[] args) throws InterruptedException {
        System.out.println("开始生产电脑......");
        CountDownLatch countDownLatch = new CountDownLatch(8);
        //主板、显示器、内存、显卡、CPU、键盘、鼠标、机箱
        new Thread(new Worker("主板", countDownLatch)).start();
        new Thread(new Worker("CPU", countDownLatch)).start();
        new Thread(new Worker("内存", countDownLatch)).start();
        new Thread(new Worker("显示器", countDownLatch)).start();
        new Thread(new Worker("显卡", countDownLatch)).start();
        new Thread(new Worker("电源", countDownLatch)).start();
        new Thread(new Worker("键盘", countDownLatch)).start();
        new Thread(new Worker("鼠标", countDownLatch)).start();
        
        countDownLatch.await();//等待,直到所有的部件都生产出来
        
        System.out.println("利用各个部件组装一台电脑,完成生产!!!"); 
    }
}

结果输出

开始生产电脑......
完成部件[电源]生产!!
完成部件[显卡]生产!!
完成部件[显示器]生产!!
完成部件[CPU]生产!!
完成部件[主板]生产!!
完成部件[键盘]生产!!
完成部件[内存]生产!!
完成部件[鼠标]生产!!
利用各个部件组装一台电脑,完成生产!!!

在多线程协作工作时,当有线程需要等待其他线程完成某个操作,才能往下执行时就可以用到此类进行协调处理

相关文章

  • 8. Java中的并发工具类

    CountDownLatch 作用:等待一个或多个线程执行完成; 使用: CountDownLatch cdl =...

  • JUC并发编程-6.CountDownLatch源码解析

    1.CountDownLatch相关API使用 运行结果 2.CountDownLatch相关API解读 new ...

  • countdown设计模式

    使用JDK自带的countdownLatch

  • CountDownLatch 使用

    java.util.concurrent.CountDownLatch是一个并发结构,它允许一个或多个线程等待一组...

  • CountDownLatch使用

    该类是一个同步功能的辅助类,使用效果是给定一个技术,当使用这个类的线程判断计数不为0时,则成wait状态,如果为0...

  • CountDownLatch使用

    CountDownLatch使用 CountDownLatch是java中的一个同步工具类.用于对线程的阻塞和唤醒...

  • CountDownLatch使用

    CountDownLatch是JAVA提供在java.util.concurrent包下的一个辅助类。 内部有一个...

  • CountDownLatch使用

    CountDownLatch结合多线程可以控制并发,异步先行,并发阻塞,充分利用多核cpu,同时处理多项事情,底层...

  • CountDownLatch使用

    之前开发遇到一个场景,需要开启多线程上传图片到阿里云,将所以图片上传完成后,将图片地址一起提交到后端。那么这里就需...

  • 并发工具类

    CountDownLatch 简介 CountDownLatch 允许一个或多个线程等待其他线程完成操作。 使用场...

网友评论

    本文标题:CountDownLatch使用

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