CountDownLatch并发测试
发布日期:2021-05-08 09:46:32 浏览次数:20 分类:技术文章

本文共 1609 字,大约阅读时间需要 5 分钟。

CountDownLatch是并发容器JUC下的类,允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。

使用给定的计数初始化CountDownWatch。由于调用了countdown()方法,wait方法将一直阻塞,直到当前计数为零。之后,所有等待线程都被释放,任何随后的wait调用都会立即返回。这是一种一次性现象——计数无法重置。如果您需要重置计数的版本,请考虑使用cyclicBarrier。
CountDownLatch是一种通用的同步工具,可用于多种用途。用一个计数初始化的Countdownloatch用作一个简单的开/关闩锁。或:所有调用的线程都等待在入口等待,直到被调用的线程打开为止。countDown()。一个CountDownLatch初始化为N可以用来做一个线程等待,直到N线程完成一些动作,或某些动作已经完成N次。
Countdownloatch的一个有用属性是,它不要求调用countdown的线程在继续之前等待计数达到零, 它只是防止任何线程在所有线程都可以通过之前继续经过等待。

HttpClientUtil是自己写的一个发送http请求的工具类

public class CountDownLatchTest {
public static void main(String[] args) {
final long time = System.currentTimeMillis(); final String url = "http://localhost/user/"; int len = 10; final CountDownLatch latch = new CountDownLatch(len); for (int i = 0; i < len; i++) {
final int id = i; new Thread(new Runnable() {
public void run() {
latch.countDown(); try{
latch.await(); } catch (InterruptedException e){
e.printStackTrace(); } HttpClientUtil.sendGet(url + id); long usetime = System.currentTimeMillis() - time; System.out.println("到第" + id + "个请求已用时:" + usetime / 1000 + "秒"); } }).start(); } }}

主要使用两个方法

public void await()

除非线程被中断,否则导致当前线程等待锁存器倒计数到零。, 导致当前线程等待,直到锁存器倒计数至零,除非线程被中断。

如果当前计数为零,则此方法立即返回。
如果当前计数大于零,则当前线程将被禁用以进行线程调度,并且在发生以下两种情况之一之前处于休眠状态:, 如果当前计数大于零,则当前线程的线程调度目的就退出,一直处于休眠状态的两种情况之一发生:
由于countDown()方法的调用,计数达到零;要么
其他一些线程会中断当前线程。
如果当前线程:
在进入此方法时设置其中断状态;要么
在等待时被打断
然后抛出InterruptedException并清除当前线程的中断状态。

public void countDown()

减少锁存器的计数,如果计数达到零则释放所有等待的线程。

如果当前计数大于零,则递减。如果新计数为零,则重新启用所有等待线程以进行线程调度。
如果当前计数等于零,则没有任何反应。

转载地址:https://blog.csdn.net/l_learning/article/details/89599688 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Thread和Runnable的关系
下一篇:自定义异常处理

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月13日 16时29分54秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

一张图快速理解入门递归函数(Java版) 2019-04-26
C语言算法 求最大公约数(辗转相除法) 2019-04-26
掌握C语言判断素数(质数)相关内容 2019-04-26
小米多看电纸书 安装悬浮球 安装桌面 安装微信阅读 小米多看电纸书悬浮球 2019-04-26
Java Web 判断访问的客户端是手机还是电脑(区分安卓,iPhone,pc) 2019-04-26
Hibernate多对多的关系映射,详解(代码+图解)与应用 举个栗子,搞的清楚 2019-04-26
Hibernate的查询方式(大全)(检索方式)OID查询+ HQL检索 +QBC检索+SQL检索 2019-04-26
Hibernate环境搭建 2019-04-26
Hibernate的抓取策略---Hibernate查询方式的优化 延迟加载 + 抓取策略 2019-04-26
C语言算法题,统计个年龄段的人数0~9,10~19.。。。。分别放置到数组b[0],b[1]......... 2019-04-26
Struts2快速入门,超简单详细的快速入门教程 2019-04-26
Java 冒泡排序详解,一分钟理解冒泡排序 2019-04-26
Struts2的执行流程 2019-04-26
Struts2的常见配置,配置XML的提示,Struts2的配置文件,package 的配置,Action的配置,常量的配置,Struts2的分模块开发的配置 2019-04-26
C语言算法,图解+详解 统计输入字符串当中要查找字符串的数量,substr所指的子符串在str所指的字符串中出现的次数。 2019-04-26
Java 当中 通过Date获取时间和通过SimpleDateFormat格式化时间 2019-04-26
Struts的数据的封装,属性驱动:提供属性set方法的方式,属性驱动:页面中提供一种表达式,模型驱动:采用模型驱动的方式,INPUT的逻辑视图的配置 2019-04-26
Struts2的复杂数据类型的封装,封装数据到List集合中,封装数据到Map集合当中 2019-04-26
Mysql计算月份差 2019-04-26
OGNL,OGNL在Struts2环境当中的使用(入门) 2019-04-26