CountDownLatch - 倒计时锁

简介: CountDownLatch - 倒计时锁

一、什么是倒计时锁



CountDownLatch倒计时锁特别适合”总-分任务”,例如多线程计算后的数据汇总

CountDownLatch类位于java.util.concurrent(J.U.C)包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他3个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。


二、执行原理


image.png


image.png


通俗的来讲先定义一个初始量,如CountDownLatch=3,定义之后,主线程会进入到阻塞状态,每当线程执行一次任务之后,便会进行递减一次定义的初始值的操作,当定义的初始值为0时,便会唤醒主线程,进行执行。


三、代码示例


package com.caiweiwei.lianxi.controller;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CountDownSample {
    private static int count=0;
    public static void main(String[] args) {
        ExecutorService executorService= Executors.newFixedThreadPool(100);
        CountDownLatch countDownLatch=new CountDownLatch(1000);//CDL总数和操作数保持一致
        for (int i=1;i<=1000;i++){
            final  int index=i;
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    synchronized (CountDownSample.class){
                        try{
                            count = count + index;
                        }catch (Exception e){
                            e.printStackTrace();
                        }finally {
                            //计数器减一
                            countDownLatch.countDown();
                        }
                    }
                }
            });
        }
        try{
            countDownLatch.await();//堵塞当前线程,知道cdl=0的时候再继续往下走
        }catch (Exception e){
            e.printStackTrace();
        }
        System.out.println(count);
        executorService.shutdown();
    }
}



相关文章
|
8月前
|
Java 测试技术
CountDownLatch、CyclicBarrier让线程听我号令
CountDownLatch、CyclicBarrier让线程听我号令
84 0
|
8月前
|
Java 数据库连接 mybatis
CountDownLatch(倒计时器)源码解读与使用
CountDownLatch(倒计时器)源码解读与使用
|
8月前
信号量(Semaphore)与线程计数器(CountDownLatch)(详解)
信号量(Semaphore)与线程计数器(CountDownLatch)(详解)
73 0
信号量(Semaphore)与线程计数器(CountDownLatch)(详解)
|
8月前
多线程并发之CountDownLatch(闭锁)使用详解
多线程并发之CountDownLatch(闭锁)使用详解
378 0
|
Java 开发工具 git
【Java多线程】如何正确使用倒计时协调器:CountDownLatch
CountDownLatch可以用来实现一个或者多个(注意可以有多个)线程,等待其他线程完全一组特定的操作后,才开始继续执行的操作,这些特定的操作被称作先决条件。
246 2
深入理解JUC:第四章:CountDownLatch倒计时器
深入理解JUC:第四章:CountDownLatch倒计时器
深入理解JUC:第四章:CountDownLatch倒计时器
ReentrantLock可重入、可打断、锁超时实现原理
ReentrantLock可重入、可打断、锁超时实现原理
274 0
ReentrantLock可重入、可打断、锁超时实现原理
信号量(Semaphore)与线程计数器(CountDownLatch)
Semaphore属于共享锁,即多个线程可以同时获取,用来表示可用资源的个数,本质上是一个计数器。
信号量(Semaphore)与线程计数器(CountDownLatch)
|
前端开发 Java 开发工具
非常有用的并发控制-倒计时器CountDownLatch
CountDownLatch见名思义,即倒计时器,是多线程并发控制中非常有用的工具类,它可以控制线程等待,直到倒计时器归0再继续执行。
141 0
非常有用的并发控制-倒计时器CountDownLatch

热门文章

最新文章

下一篇
开通oss服务