多线程并发编程-并发工具类----CountDownLatch原理分析&适用场景分析&对比join差异

本文介绍了Java并发编程中的CountDownLatch工具类,对比了它与join关键字的区别。CountDownLatch允许主线程等待其他线程完成操作,内部计数器机制确保所有线程完成后主线程继续执行。在实际开发中,CountDownLatch常用于主线程需要等待多个子线程执行完毕的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言:

       首先,在前面我们在学习线程间通信的时候,学到一个关键字:join,例如在main方法中,执行t1.join(),t2.join(),则main主线程会阻塞运行,直到t1,t2分别执行完,回调阻塞在t1,t2上面的线程。这是main线程会重新获得执行契机。

     今天咱们学习的CountDownLatch,是非常有用的开发工具类,在JDK1.5版本中,开发包,提供了CountDownLatch也可以实现join的功能,并且比join支持的功能更多,它允许一个或多个线程等待其他线程完成操作。

二、案例分享:

       咱们先从案例分析:

package com.jason.thread.tool.countdownlatch;

import java.util.concurrent.CountDownLatch;

/**
 * @program: JasonSpringMybatis
 * @description
 * @author: 大龄程序猿
 * @create: 2020-05-30 23:51
 **/
public class App {
    public static int maxSize=3;
    public static CountDownLatch  countDownLatch=new CountDownLatch(maxSize);

    public static void main(String[] args) throws InterruptedException {
            System.out.println("等待线程计数器:"+countDownLatch.getCount());
            Thread t_main=new Thread(){
                @Override
                public void run() {
                    countDownLatch.countDown();//通知AQS更新state状态值减一。
                    /*
                       后续还有其他业务逻辑,需要处理,不像join指令,需要等待当前线程消亡,由JVM通知等待在该线程上的线程。
                     */
                }
            };
        t_main.setName("t_main");
        Thread t_main1=new Thread(){
            @Override
            public void run() {
                countDownLatch.countDown();
            }
        };
        t_main1.setName("t_main1");
        Thread t_main2=new Thread(){
            @Override
            public void run() {
                countDownLatch.countDown();
            }
        };
        t_main.start();
        Thread.sleep(1000);
        System.out.println("等待线程计数器:"+countDownLatch.getCount());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

石头城程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值