CountDownLatch的学习和图解

『死磕Java并发编程系列』并发编程工具类之CountDownLatch 《死磕 Java 并发编程》系列连载中,大家可以关注一波: ????????『死磕Java并发编程系列』 01 十张图告诉你多线程那些破事 『死磕Java并发编程系列』 02 面试官:说说什么是Java内存模型? 『死磕Java并发编程系列』 03 面试必问的CAS原理你会了吗? 『死磕Java并发编程系列』 04 面试官:说说Atomic原子类的实现原理? ????????『死磕Java并发编程系列』 05 图解Java中那18 把锁 在日常编码中,Java 并发编程可是少不了,试试下面这些并 阅读详情



package com.example;

import java.util.Date;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

public class MyClass {

    public static void main(String args[]) {
        System.out.println("main->" + Thread.currentThread());
        final CountDownLatch latch = new CountDownLatch(1);

        System.out.println("Mission Start" + new Date().getTime());

        new Thread(new Runnable() {
            @Override
            public void run() {
                Worker worker1 = new Worker("zhang san", 2000, latch);
                Worker worker2 = new Worker("Wang er", 8000, latch);

                worker1.start();
                worker2.start();

                System.out.println("before await" + new Date().getTime());

                try {
                    //latch.await(200, TimeUnit.MILLISECONDS);//这里只要是latch 执行完了,那么这里
                    latch.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    System.out.print("InterruptedException");
                }
                System.out.println("after await" + new Date().getTime());

            }
        }).start();


        System.out.println("Mission Complete" + new Date().getTime());
    }

}

class Worker extends Thread{
    CountDownLatch latch;
    int sleepTime;
    String workName;

    public Worker(String workName,int sleepTime,CountDownLatch latch){
        this.workName = workName;
        this.sleepTime = sleepTime;
        this.latch = latch;
    }
    @Override
    public void run() {

        System.out.println("worker " + workName + " start to work"+new Date().getTime());
            work();
        System.out.println("worker " + workName + " finish work"+new Date().getTime());

    }

    public void  work(){
        try{
            Thread.sleep(sleepTime);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            latch.countDown();
        }
    }
}


参考;http://www.iteye.com/topic/1002652





H桥电路原理 一、H桥原理 图1中所示为一个典型的直流电机控制电路。电路得名于“H桥式驱动电路”是因为它的形状酷似字母H。4个三极管组成H的4条垂直腿,而电机就是H中的横杠(注意:图1及随后的两个图都只是示意图,而不是完整的电路图,其中三极管的驱动电路没有画出来)。   如图所示,H桥式电机驱动电路包括4个三极管和一个电机。要使电机运转,必须导通对角线上的一对三极管。根据不同三极管对的导通情况,电流可能会从左... 阅读详情

相关推荐

COMSOL仿真避坑指南:列管反应器模拟中多孔介质与化学反应设置的5个常见错误

本文详细解析了COMSOL仿真中列管反应器模拟的5个常见错误,包括多孔介质模型选择、化学反应接口配置、对流扩散方程处理、薄层热阻设置及网格独立性验证。特别针对多孔介质与化学反应设置的误区,提供了实用的判断标准和修正方法,帮助工程师避免计算偏差,提升仿真精度。

weixin_29597551的博客 321

CountDownLatch 门闩 实例详解

CountDownLatch 介绍 CountDownLatch是JAVA提供在java.util.concurrent包下的一个辅助类,可以把它看成是一个计数器,其内部维护着一个count计数,只不过对这个计数器的操作都是原子操作,同时只能有一个线程去操作这个计数器。如果调用对象上的await()方法,调用者就会一直阻塞,直到别人调用countDown方法,将计数减到0,才可以继续执行。 C...

nameIsHG的博客 574

C++继承与多态 - 继承多态原理01

C++继承多态原理讲解

大秦坑王的专栏 2977

并发编程(8):CountDownLatch的基本使用与实现原理

1、CountDownLatch的作用:允许一个或多个线程等待其他线程完成操作。 意思就是使用CountDownLatch来阻塞一条或多条线程,当CountDownLatch的计数被线程减到0后,就唤醒阻塞的一条或多条线程。 2、CountDownLatch的使用案例: 案例一:使用一个计数为3的CountDownLatch 实例阻塞两条线程T1、T2,随机创建3条线程,每条线程去将计数-1,当3变成0的时候,就会唤醒阻塞的T1、T2线程。 public class C...

qq_34978129的博客 375

双极性步进电机驱动技术:从H桥电路到精准控制

本文深入解析了双极性步进电机驱动技术的核心,从H桥电路的基础原理讲起,阐述了其作为实现电机正反转和精准控制的关键。文章详细介绍了H桥的工作模式、防共态导通设计,并对比了L298N、DRV8825及TMC2209等主流集成驱动芯片的选型。进一步探讨了通过微步进与电流矢量控制实现平滑、静音运行的高级技术,并提供了基于STM32的实战代码与避坑指南,帮助开发者从理论到实践全面掌握精准运动控制。

tea88的博客 594

波分复用技术原理

波分复用原理 把不同波长的光信号复用到同一根光纤中进行传送,这种方式我们把它叫做波分复用( Wavelength Division Multiplexing ) 一根光纤被划分为多个波道,多个波长以一定的间隔隔开,在光纤中独立传输。 波分复用应用演示 如果将WDM系统看作交通系统,光纤可以看作是多个车道的公用道路。 各种类型的业务就像货物一样,被打包装载到车辆中。 车辆按照分配的车道行驶至目的地,完成货物的运输。 想要提高波分复用系统的传输容量,就要增加波道数量或是提升单波传...

m0_63251770的博客 9997

CountDownLatch的使用

当某项工作需要由若干项子任务并行地完成,并且只有在所有的子任务结束之后(正常结束或者异常结束),当前主任务才能进入下一阶段,CountDownLatch工具将是非常好用的工具,并且其所提供的操作方法还是线程安全的。 try { final CountDownLatch latch = new CountDownLatch(factorIndexList.size()); //多线程执行同步任务 for (String factorIn

pengli 277

数据仓库数据质量监控和处理方法最佳实践

指的是检查数据是否存在反常或者错误的情况,例如数值反常地过大或者过小,或者超过记录的波动值,对应的规则包括数值波动检查,最大值、最小值检查,跨表准确性等。指的是检查数据是否存在缺失的情况,这里的缺失可以是整个数据集的记录缺失,也可以是某个字段记录的缺失,对应的规则包括空值检查,表总行数检查。指的是检查数据是否符合规范,是否按照规定的格式存储,对应的规则包括正则表达式检查,字段长度检查,枚举集合检查,数值范围等。指的是检查哪些数据是重复数据或者数据的哪些属性是重复的,对应的规则例如主键唯一性检查。

大模型大数据攻城狮的专栏 896

JUC之AQS之CountDownLatch

CountDownLatch允许一个或多个线程等待其他线程完成操作。 比如如果要实现一个这样的功能:要让主线程等待所有线程完成自己的操作后再执行,最简单的做法是使用join()方法(可参看https://blog.youkuaiyun.com/Dongguabai/article/details/82255331)。这是一个比较简单简单的例子: package dgb.test.concurrent; ...

【欢迎关注公众号:冬瓜白】 586

DeepSeek赋能公文写作:从高效成文到精准传情的全维度指南

摘要:AI赋能公文写作的精准化实践 公文写作长期面临框架混乱、素材匮乏、表达不规范、修改低效等痛点。DeepSeek等AI工具通过"精准指令+分步赋能"模式实现突破:首先明确公文的目的性、逻辑性和规范性特征;其次采用包含场景、类型、目的等要素的指令模板;再分四步实施:框架搭建确保层次分明,内容填充解决素材问题,表达优化适配不同语体,合规校验把关格式规范。典型案例显示,AI能将数据罗列转化为"数据+成果+价值"的生动表述,使公文既规范又具感染力。这种AI赋能的写作方法显

通俗易懂学IT 231

Python爬虫实战:京东/淘宝商品价格与评论监控系统——从User-Agent伪装到编码陷阱的全面攻克

在电商数据驱动决策的今天,无论是个人消费者想抓住历史低价,还是市场分析师需要追踪竞品动态,抑或是算法交易员依赖实时价格信号,自动化的商品价格与评论监控系统都已成为不可或缺的工具。然而,电商平台的反爬虫策略日益严苛,字符编码的“暗坑”更是让初学者屡屡碰壁。本文将以京东(JD.com和淘宝(Taobao.com两大主流平台为目标,手把手带你构建一个稳定、高效的商品监控爬虫。User-Agent伪装——如何模拟真实浏览器行为,突破初级反爬。GBK/UTF-8编码混战。

2201_76125261的博客 75

Java面试核心知识5

抢占式调度指的是每条线程执行的时间、线程的切换都由系统控制,系统控制指的是在系统某种 运行机制下,可能每条线程都分同样的执行时间片,也可能是某些线程执行的时间片较长,甚至 某些线程得不到执行的时间片。在这种机制下,一个线程的堵塞不会导致整个进程堵塞。java 使用的线程调使用抢占式调度,Java中线程会按优先级分配CPU时间片运行,且优先级越高 越优先执行,但优先级高并不代表能独自占用执行时间片,可能是优先级高得到越多的执行时间 片,反之,优先级低的分到的执行时间少但不会分配不到执行时间。

m0_74249744的博客 827

【STM32系统】基于STM32+手机APP设计的智能停车场系统

功能简介1、进出停车场时需要刷卡,进行一个记时、计费的功能。2、停车位配有超声波检测,主要识别车位是否被占用。3、车位区域配有OLED显示屏,用户可以通过显示屏看到空闲车位。4、车位配有车位灯。当用户找不到车位可以通过手机点亮车位灯5、停车场配有温湿度检测和烟雾检测模块。当环境发生异常状态。会触动紧急报警。6、停车场信息会通过Wi-Fi发送数据上传至阿里云。用户可以通过手机了解到停车场空闲车位和停车时间、费用。

嵌入式阿齐Archie 2万+

CountDownLatch 使用&核心原理 图解

疯狂创客圈 经典图书 : 《Netty Zookeeper Redis 高并发实战》 面试必备 + 面试必备 + 面试必备 【博客园总入口 】 疯狂创客圈 经典图书 : 《SpringCloud、Nginx高并发核心编程》 大厂必备 + 大厂必备 + 大厂必备 【博客园总入口 】 入大厂+涨工资必备: 高并发【 亿级流量IM实战】 实战系列 【 SpringCloud Nginx秒杀】 实战系列 【博客园总入口 】 并发工具类 系列文章: 1 Cy..

架构师尼恩 783

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

万字图解 Java 并发框架:Fork/Join、CountDownLatch、Semaphore、CyclicBarrier

这两个线程通过 exchange 方法交换数据,如果第一个线程先执行 exchange()方法,它会一直等待第二个线程也 执行 exchange 方法,当两个线程都到达同步点时,这两个线程就可以交换数据,它要做的事情是,让一 组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会 开门,所有被屏障拦截的线程才会继续运行。比如计算 1+2+…的源码实现,发现其实它的代码实现非常简单,算上注释也才 300+ 行代码,如果去掉注释的话代码不到 100 行,大部分方法实现都是调用的。

码哥字节 729

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

CountDownLatch-countDown-await图解

qq_34606853的博客 831

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

并发工具CountDownLatch、CyclicBarrier、Semaphore

*** 描述:工厂中,质检,5个工人检查,所有人都认为通过,才通过*/i < 5;i++) {@Overridetry {System.out.println("No." + no + "完成了检查。");System.out.println("等待5个人检查完.....");// 这里也可以设置超时等待时间, 如: latch.await(5, TimeUnit.SECONDS);System.out.println("所有人都完成了工作,进入下一个环节。");

pscool的博客 762

图解基于AQS队列实现的CountDownLatch和CyclicBarrier

CountDownLatch CyclicBarrier

weixin_42827159的博客 304

CountDownLatch入门图解:5分钟掌握核心用法

CountDownLatch是Java中一个非常有用的同步辅助类,它允许一个或多个线程等待其他线程完成操作。可以把它想象成运动场上的起跑场景:裁判(主线程)需要等待所有运动员(子线程)都准备好后,才能发令起跑。

BlackironLynx23的博客 581

如何使用CountDownLatch实现多线程的同步

如何使用CountDownLatch实现多线程的同步 业务需求 一个整体的业务可以分为三个执行逻辑 业务A 业务B和业务C,业务A,B直接没有关联,业务C一定要等业务A和B执行完毕后执行。 图解说明 如下图 代码案例 public static void main(String[] args) throws InterruptedException { //创建线程池 ...

微信公众号《后端学长》 832

CountDownLatch的理解和使用

在笔者想要了解Thrift时候,找到一个博主写的系统间通信技术的架构设计,在了解和学习的过程中遇到很多小问题和基础知识,自己还是不够清楚,就查询和总结下。 因为笔者也都是从网上找的一些资料,好的资料笔者都是自己收敲一遍,这样觉得能够加深下印象,引发更多的思考,毕竟很多时候笔者感觉自己都是七秒的记忆。 在第一篇文章中遇到了一个CountDownLatch同步计数器,当计数器数值减为0时,所...

那些年的代码 172

CountDownLatch、CyclicBarrier、Semaphore的简单理解和使用

1、CountDownLatch 是Jdk1.5引入的一个工具类,被称作为:倒计数器 创建对象时,参数实际为参与的线程数 在执行过程中每执行一个线程调用一次countDown方法,计数器值减一,直至为0 当调用await方法,方法会等到计数器值变成0,在此之前,线程会进入阻塞状态 该该工具类经常用于等待其他线程执行到某一节点,再继续执行当前线程代码,场景如下: 1、统计线程的执行情况 2、压测中,实现最大强度的并发 3、多线程间通信,如:线程异步调用完接口,获取结果通知 ..

hu10131013的博客 16万+

5分钟图解CountDownLatch:小白也能懂的多线程同步

想象一下运动会的4×100米接力赛。CountDownLatch就像一个计数器,初始值为4(运动员数量),每个运动员准备好后计数器减1,当计数器归零时裁判才会吹哨开始比赛。作为一个刚接触并发编程的新手,我发现用生活中的例子来理解这个概念特别有效。下面就用运动会的接力赛来比喻,带大家快速掌握CountDownLatch的核心用法。通过这个接力赛的例子,相信大家对CountDownLatch有了直观的理解。我发现它的交互式编辑器特别适合学习并发编程,可以实时看到线程执行顺序和状态变化,比单纯看代码直观多了。

AmberLeopard26的博客 109

Java高级25-Java 并发:CountDownLatch 与 CyclicBarrier 实战对比

Java并发工具:CountDownLatch与CyclicBarrier对比 摘要 Java并发编程中的CountDownLatch和CyclicBarrier是两种常用的线程同步工具,尽管功能相似但设计理念和应用场景不同。CountDownLatch是一次性的倒计时门闩,适用于主线程等待多个子线程完成任务(如并行计算汇总),通过countDown()递减计数器,await()阻塞直到归零。CyclicBarrier是可循环使用的同步屏障,允许多个线程相互等待到达屏障点(如多阶段任务协作),通过await

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

Java并发学习笔记(三)-闭锁CountDownLatch

闭锁CountDownLatch是一种同步类,它的作用相当于一扇门,在闭锁达到结束状态之前,这扇门一直是关闭的,没有线程可以通过,当达到结束状态的时候,这扇门就会打开,并且会永远保持打开状态,允许所有的线程通过。闭锁包含一个计数器,计数器就是这扇门,当计数器不为0的时候,调用latch.await方法的线程就会一直阻塞,直到计数器为0。即调用await方法的线程等待计数器为0。 public

ltnb的专栏 729

Semaphore、CountdownLatch、CyclicBarrier详解

文章目录1.Semaphore1.1 基本使用1.2 Semaphore原理-图解流程1.3 Semaphore原理-源码分析2.CountdownLatch3.CyclicBarrier 1.Semaphore 信号量,用来限制能同时访问共享资源的线程上限。 1.1 基本使用 /** * @ClassName SemaphoreTest * @author: shouanzh * @Description 信号量,用来限制能同时访问共享资源的线程上限。 * @date 2022/3/20 11:3

张大安的博客 1083
上一篇: DataGrip使用入门-安装及数据源管理(一)
下一篇: synchronized与static synchronized 的区别
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值