CountDownLatch

countdownlatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完毕再执行。从 命名可以解读到countdown是倒数的意思,类似于我们倒计时的概念。

countdownlatch提供了两个方法,一个是countDown,一个是await, countdownlatch初始化的时候需要传入一 个整数,在这个整数倒数到0之前,调用了await方法的程序都必须要等待,然后通过countDown来倒数

package com.example.demo.morethread;

import java.util.concurrent.CountDownLatch;

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

        CountDownLatch countDownLatch=new CountDownLatch(3);
        new Thread(()->{
            System.out.println(Thread.currentThread().getName()+"开始执行"+countDownLatch.getCount());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            countDownLatch.countDown();
            System.out.println(Thread.currentThread().getName()+"执行结束"+countDownLatch.getCount());
        },"thread1").start();
        new Thread(()->{
            System.out.println(Thread.currentThread().getName()+"开始执行"+countDownLatch.getCount());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            countDownLatch.countDown();
            System.out.println(Thread.currentThread().getName()+"执行结束"+countDownLatch.getCount());
        },"thread2").start();
        new Thread(()->{
            System.out.println(Thread.currentThread().getName()+"开始执行"+countDownLatch.getCount());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            countDownLatch.countDown();
            System.out.println(Thread.currentThread().getName()+"执行结束"+countDownLatch.getCount());
        },"thread3").start();
        try {
            countDownLatch.await();
            System.out.println("所有线程执行完毕");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

运行结果如下:

使用场景 

1. 通过countdownlatch实现最大的并行请求,也就是可以让N个线程同时执行

2. 比如应用程序启动之前,需要确保相应的服务已经启动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值