非常有用的并发控制-倒计时器CountDownLatc

转载自 非常有用的并发控制-倒计时器CountDownLatch

CountDownLatch见名思义,即倒计时器,是多线程并发控制中非常有用的工具类,它可以控制线程等待,直到倒计时器归0再继续执行。


给你出个题,控制5个线程执行完后主线徎再往下执行,并统计5个线程的所耗时间。当然我们可以通过join的形式完成这道题,但如果我说统计100个1000个线程呢?难道要写1000个join等待吗?这显然是不现实的。


废话少说,我们来做一个例子看看上面的题怎么实现,并理解倒计时器。


首先通过new CountDownLatch(5)约定了倒计时器的数量,在这里也是线程的数量,每个线程执行完后再对倒计时器-1。countDown()方法即是对倒计时器-1,这个方法需要放在finally中,一定要保证在每个线程中得到释放,不然子线程如果因为某种原因报错倒计时器永远不会清0,则会导报主线程会一直等待。


await()方法即是主线程阻塞等待倒计器归0后再继续往下执行,当然await可以带时间进去,等待多久时间后不管倒计时器有没有归0主线程继续往下执行。


如上面的例子所示,我们输出了倒计时器最后的数字0,表示倒计时器归0了,也输出了从开始到结束所花费的时间。从这个例子可以完全理解倒计时器的含义,这个工具类在实际开发经常有用到,也很好用。


CountDownLatch见名思义,即倒计时器,是多线程并发控制中非常有用的工具类,它可以控制线程等待,直到倒计时器归0再继续执行。


给你出个题,控制5个线程执行完后主线徎再往下执行,并统计5个线程的所耗时间。当然我们可以通过join的形式完成这道题,但如果我说统计100个1000个线程呢?难道要写1000个join等待吗?这显然是不现实的。


废话少说,我们来做一个例子看看上面的题怎么实现,并理解倒计时器。


首先通过new CountDownLatch(5)约定了倒计时器的数量,在这里也是线程的数量,每个线程执行完后再对倒计时器-1。countDown()方法即是对倒计时器-1,这个方法需要放在finally中,一定要保证在每个线程中得到释放,不然子线程如果因为某种原因报错倒计时器永远不会清0,则会导报主线程会一直等待。


await()方法即是主线程阻塞等待倒计器归0后再继续往下执行,当然await可以带时间进去,等待多久时间后不管倒计时器有没有归0主线程继续往下执行。


如上面的例子所示,我们输出了倒计时器最后的数字0,表示倒计时器归0了,也输出了从开始到结束所花费的时间。从这个例子可以完全理解倒计时器的含义,这个工具类在实际开发经常有用到,也很好用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移除指定的session

在上次我写的文章中,我描述了如何把数据添加到session里面,再让临时表格读取session的数据显示到页面。 我们都知道,有添加就有移除对吧,哪么我们又该如何把临时表格里面的数据移除呢?嘿嘿,这个其实也挺简…

javap命令参数

C:\Users\pacoson>javap -help 用法: javap <options> <classes> 其中, 可能的选项包括:-help --help -? 输出此用法消息-version 版本信息-v -verbose 输出附加信息-l 输出行号和本地变量表-pub…

非常有用的并发控制-循环栅栏CyclicBarrier

转载自 非常有用的并发控制&#xff0d;循环栅栏CyclicBarrier昨天我讲了倒计时器CountDownLatch的应用&#xff0c;它是阻塞线程直到计时器归0的一种等待方式。今天讲的这个循环栅栏CyclicBarrier与倒计时器非常类似&#xff0c;但它比倒时器更加强大且稍微复杂&#xff0c;它…

一个会定时执行的方法

开发工具与关键技术&#xff1a;Visual Studio、MVC作者&#xff1a;幻奏撰写时间&#xff1a;2019.6.27我们在做项目的时候不是有一些要我们定时完成的任务吗&#xff1f;很多人应该都会用定时器来完成这个任务。我今天要讲的就是如何使用定时器的插件来完成我们今天的任务。 …

VC6.0下载及安装

转自&#xff1a; https://blog.csdn.net/weixin_37536336/article/details/81187963 希望对下载&#xff0c;并学习C语言的朋友&#xff0c;有帮助。 1.绿色版&#xff1a; 网址&#xff1a;https://pan.baidu.com/s/1jN70y8x6-_1XGJHESlMspA 密码&#xff1a;sla5 2.企业…

如何实现下拉框的绑定

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.7.5下拉框你们都见过吧&#xff0c;下拉框的作用是方便用户更快的输入&#xff0c;同时也限制了用户&#xff0c;再也不怕用户乱写啦。 下拉框我们该如何绑定呢&#xff0c;这…

volatile关键字解析~高级java必问

转载自 volatile关键字解析~高级java必问昨天我介绍了原子性、可见性、有序性的概念&#xff0c;那么今天就来见识下这些概念的主角-volatile关键字。volatile基本介绍volatile可以看成是synchronized的一种轻量级的实现&#xff0c;但volatile并不能完全代替synchronized&…

B树、B+树、B*树谈到R 树

转自&#xff1a; https://blog.csdn.net/v_JULY_v/article/details/6530142 从B 树、B 树、B* 树谈到R 树 作者&#xff1a;July、weedge、Frankie。编程艺术室出品。 说明&#xff1a;本文从B树开始谈起&#xff0c;然后论述B树、B*树&#xff0c;最后谈到R 树。其中B树、B树…

一个会定时完成的任务(二)

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.7.5上次我大概说了一下定时任务是如何实现的&#xff0c;由于我只是大概的说了那个插件是如何使用的&#xff0c;它的其他方法我还没和你们细说&#xff0c;所以&#xff0c;…

String.format()方法的使用

转载自 java字符串格式化&#xff1a;String.format()方法的使用常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的读者应该记得C语言的sprintf()方法&#xff0c;两者有类似之处。format()方法有两种重载形式。 l form…

转-《高性能mysql》并不是一本好书——SQL笔记

转自&#xff1a; https://book.douban.com/review/8122660/ 版权归作者所有&#xff0c;任何形式转载请联系作者。 作者&#xff1a;姚泽源&#xff08;来自豆瓣&#xff09; 来源&#xff1a;https://book.douban.com/review/8122660/ 在知乎上发过一次&#xff0c;这里也发一…

实现模糊查询并忽略大小写

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.7.13我们在实现查询功能的时候&#xff0c;常常会用到模糊查询。这个呀&#xff0c;可是很重要的&#xff0c;当用户输入条件查询时&#xff0c;我们就要显示对应的数据&…

字符串拼接方式

转载自 java提高篇之字符串对于字符串而言我们经常是要对其进行拼装处理的&#xff0c;在java中提高了三种拼装的方法&#xff1a;、concat()以及append()方法。这三者之间存在什么区别呢&#xff1f;先看如下示例&#xff1a; public class StringTest {/*** desc 使用、conca…

用js比较时间大小

开发工具与关键技术&#xff1a;Visual Studio、js 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.7.17对比时间的大小在很多项目里面都有用到&#xff0c;刚开始我还不会怎样比较时间的大小&#xff0c;后来上了老师的课之后&#xff0c;我才知道怎样比较时间的大小。 比较时…

独家:这也许是最具珍藏价值的Oracle DBA生存宝典!

转自&#xff1a; https://dbaplus.cn/news-10-1475-1.html 曾几何时&#xff0c;DBA一度被视为越老越吃香的职业&#xff0c;而从事数据库霸主Oracle的DBA更是风靡多时的技术人择业之选。 但随着Oracle自身技术的不断提升和完善&#xff0c;人手的操作不断被削弱&#xff0c;O…

StringTokenizer的使用

转载自 Java学习笔记--StringTokenizer的使用拓展&#xff1a;Pattern.split替代String.split http://www.cnblogs.com/gnivor/p/4386978.html StringTokenizer是一个用来分隔String的应用类 &#xff11;. 构造函数。1. StringTokenizer(String str) &#xff1a;构造一个用来…

Post请求如何取消异步

开发工具与关键技术&#xff1a;Visual Studio、post 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.7.22其实关于异步这个问题我还不太懂&#xff0c;因为我还是一只萌新嘛&#xff0c;所以我在做项目时就出现了一个关于异步的问题。 我做的项目是一个客房管理系统&#xff…

Oracle必读好书推荐

转自&#xff1a;https://blog.csdn.net/notbaron/article/details/52305255 Oracle必读好书推荐 -------------------------------------------------------------------------- tkyte的书 1、Expert Oracle Database Architecture: 9i and 10g Programming Techniques and…

如何在linq使用左连接

开发工具与关键技术&#xff1a;Visual Studio、linq 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.7.26我先说一下我的项目吧&#xff0c;上次就已经提过了&#xff0c;我做的是酒店的客房管理系统&#xff0c;首先要实现的是房态图&#xff0c;这个是根据房间的数量来新增…

Maven精选系列--私库搭建及使用

转载自 Maven精选系列--私库搭建及使用为什么要使用私库maven默认去远程中央仓库下载JAR包的&#xff0c;访问国外网络相当慢&#xff0c;如果团队每个人都去下载一遍无疑是网络的浪费&#xff0c;当然也可以添加国内的镜像&#xff0c;如阿里的比较稳定&#xff0c;但如果想添…