CountDownLatch使用

作者: 奔跑吧李博 | 来源:发表于2022-12-27 15:21 被阅读0次

之前开发遇到一个场景,需要开启多线程上传图片到阿里云,将所以图片上传完成后,将图片地址一起提交到后端。那么这里就需要监听这些多线程是否所有都执行完成。之前做的是用AtomicInteger来计数,每执行完一个线程,将这个变量+1,然后判断该值是否等于启动的线程数,如果相等了,则表明所有线程执行完毕。那么这种场景还可以直接用CountDownLatch来进行实现。

CountDownLatch是一个同步工具类,它通过一个计数器来实现的,初始值为线程的数量。每当一个线程完成了自己的任务,计数器的值就相应得减1。当计数器到达0时,表示所有的线程都已执行完毕,然后在等待的线程就可以恢复执行任务。

方法详解

CountDownLatch(int count):count为计数器的初始值(一般需要多少个线程执行,count就设为几)。
countDown(): 每调用一次计数器值-1,直到count被减为0,代表所有线程全部执行完毕。
getCount():获取当前计数器的值。
await(): 等待计数器变为0,即等待所有异步线程执行完毕。

CountDownLatch的使用场景

1.某一线程在开始运行前等待n个线程执行完毕。
2.实现多个线程开始执行任务的最大并行性。

实例:业务线程等待子线程初始化执行完成再执行
public class CountDownLatchUtil {

    private static CountDownLatch countDownLatch = new CountDownLatch(6);

    public static void main(String args[]) {
        for (int i=0;i<5;i++) {
            Thread thread = new Thread(new InitThread());
            thread.start();
        }

        Thread thread = new Thread(new BusiThread());
        thread.start();
    }

    private static class InitThread implements Runnable {

        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName() + ":执行初始化任务");
            countDownLatch.countDown();
        }
    }

    private static class BusiThread implements Runnable {

        @Override
        public void run() {
            try {
                countDownLatch.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("BusiThread" + "执行业务任务");
        }
    }
}

创建5个子线程执行run,run方法中调用countDown方法进行计数-1。同时创建BusiThread任务,在run中调用await,等待计数为0,再执行自己的业务任务。

相关文章

  • 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/eqenqdtx.html