线程并发工具类之CountDownLatch的使用及原理分析
原文链接:http://www.studyshare.cn/blog/details/1149/1
java开发工具下载地址及安装教程大全,点这里。
更多技术文章,在这里。
一、定义
CountDownLatch是线程并发工具类,该类具有一个计数器,计数器具有一个初始化的值,当主线程调用latch.await()方法则进行阻塞,调用latch.countDown()方法时计数器值减一,一直等到计数器的值减为0的时候,原来阻塞的方法继续往下执行。代码如下:
1、定义两个线程,线程一调用一次countDown(),线程二调用两次countDown()

2、主线程代码如下

3、运行结果

二、使用场景
1、使用CountDownLatch编写高并发测试程序,可以使用CountDownLatch初始化100或者更多线程,当所有线程初始化完毕后一起去调用需要测试的业务模块代码,以此来模拟实际场景的高并发访问,测试业务代码对高并发的支持极限。
2、某些系统启动之前需要做很多初始化工作,只有当初始化工作线程中的所有代码执行完毕后,才继续执行主线程代码,此时使用CountDownLatch来实现。
三、实现原理
CountDownLatch是基于AQS(AbstractQueuedSynchronizer (抽象队列同步器))实现的,关于AQS在另外一篇文章有详细讲解,包括对源码进行了深入分析,请参考:http://www.studyshare.cn/blog/details/1131/1
原创文章,转载请注明来源
java开发工具下载地址及安装教程大全,点这里。
更多技术文章,在这里。
线程并发工具类之CountDownLatch的使用及原理分析的更多相关文章
- java线程并发工具类CyclicBarrier、CountDownLatch及Semaphore
一.CyclicBarrier (原文链接:http://www.studyshare.cn/blog-front/blog/index ) 1.定义 CyclicBarrier是线程并发工具类之 ...
- 并发工具类:CountDownLatch、CyclicBarrier、Semaphore
在多线程的场景下,有些并发流程需要人为来控制,在JDK的并发包里提供了几个并发工具类:CountDownLatch.CyclicBarrier.Semaphore. 一.CountDownLatch ...
- j.u.c系列(08)---之并发工具类:CountDownLatch
写在前面 CountDownLatch所描述的是”在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待“:用给定的计数 初始化 CountDownLatch.由于调用了 countDo ...
- 【Java并发工具类】CountDownLatch和CyclicBarrier
前言 下面介绍协调让多线程步调一致的两个工具类:CountDownLatch和CyclicBarrier. CountDownLatch和CyclicBarrier的用途介绍 CountDownLat ...
- java线程并发工具类
本次内容主要讲Fork-Join.CountDownLatch.CyclicBarrier以及Callable.Future和FutureTask,最后再手写一个自己的FutureTask,绝对干货满 ...
- Java中的并发工具类:CountDownLatch、CyclicBarrier和Semaphore
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法. 一. ...
- JUC并发工具类之 CountDownLatch等待多线程完成
上篇JUC同步工具之Semaphore - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)示例中,资源释放一个线程就可以退出然后另一个线程可以使用了,那如果需要所有规定数量的资源同时释放了才 ...
- Java并发工具类之CountDownLatch
CountDownLatch允许一个或则多个线程等待其他线程完成操作. 假如我们有这样的需求:我们需要解析一个excel文件中的多个sheet,我们可以考虑使用多线程,每一个线程解析excel中的一个 ...
- juc并发工具类之CountDownLatch闭锁
import java.util.concurrent.CountDownLatch; /** * 闭锁: 在进行某些运算时, 只有其他所有线程的运算全部完成,当前运算才继续执行(程序流中加了一道栅栏 ...
随机推荐
- Why you need to understand garbage collection
Why you need to understand garbage collection I’ve been interviewing lots of C# developers recently, ...
- Tocmat 统计tomcat进程内的线程数
获取tomcat进程pid ps -ef | grep tomcat 统计该tomcat进程内的线程个数 ps -Lf 558899 | wc -l
- C++生成随机数(随机整数/浮点数)方法
来源:https://blog.csdn.net/u014571489/article/details/82258467 产生一定范围随机数的通用表示公式要取得[a,b)的随机整数,使用(rand() ...
- 针对jquery的优化方法,你知道几条
(转)我一直在寻找有关jQuery性能优化方面的小窍门,能让我那臃肿的动态网页应用变得轻便些.找了很多文章后,我决定将最好最常用的一些优化性能的建议列出来 ====================== ...
- 004 制作自己的Java镜像
一:制作镜像 1.需要的知识 dockfile docker build Jpress : http://jpress.io/ 开源免费的新媒体运营系统 2.下载jpress http:/ ...
- springboot vue前后端分离 跨跨域配置
public class CustomCorsFilter extends OncePerRequestFilter { @Override protected void doFilterIntern ...
- SpringMVC异步处理 可使用的返回值类型
CallableMethodReturnValueHandler Callable.class.isAssignableFrom(returnType.getParameterType()); Def ...
- Java学习-055-Jsoup爬虫通过设置获取响应数据大小的最大值,解决因默认获取 1MB 响应数据导致的无法获取全部的响应数据内容问题
在日常工作中,通常会遇到获取各种网络数据使用的情况,Java中可使用Jsoup(Python中可使用 BeatifulSoup)进行数据的获取及处理. 今天有朋友问,在使用 Jsoup 进行请求数据时 ...
- Android设置顶部banner背景透明度时影响全局背景问题
项目中用到滑动界面使顶部title栏背景渐隐渐现的效果,即初始不滑动时的透明度为0,用了bannerle.getBackground().setAlpha(0); 但使用这个方法设置透明度是管用,返回 ...
- java CountDownLatch报错java.lang.IllegalMonitorStateException: null
笔者使用websocket进行通信,服务器异步返回.websocket服务器又异步调用其他websocket,也是异步访问. 由于无法预测服务器调用第三方websocket什么时候调用结束,使用了Co ...