介绍
,,,,CountDownLatch门闩=new CountDownLatch (2),
,,,,工人w1=新工人(“张三“,2000年,门闩);
,,,,工人w2=新工人(“李四“,3000年,门闩);
,,,,w1.start ();
,,,,w2.start ();
,,,长,开始时间=System.currentTimeMillis ();
,,,,latch.await ();
,,,,System.out.println(“错误全部解决,领导可以给客户交差了,任务总耗时:“+ (System.currentTimeMillis()——开始时间)),
,,}
,,静态类工作者线程延伸{
,,,,字符串名称;
,,,,int工作;
,,,,CountDownLatch门闩;
,,,,公共工人(字符串名称、int想出CountDownLatch门闩){
,,,,,,this.name=名字;
,,,,,这。工作=工作;
,,,,,这。门闩=门闩;
,,,,}
,,,,@Override
,,,,公共空间run () {
,,,,,,System.out.println(名字+“开始修复错误,当前时间:“+自卫队。新日期格式(())),
,,,,,,doWork ();
,,,,,,System.out.println(名字+“结束修复错误,当前时间:“+自卫队。新日期格式(())),
,,,,,,latch.countDown ();
,,,,}
,,,,私人空间doWork () {
,,,,,,尝试{
,,,,,,,,//模拟工作耗时
,,,,,,,,thread . sleep(工作);
,,,,,,}捕捉(InterruptedException e) {
,,,,,,,,e.printStackTrace ();
,,,,,}
大敌;,,}
大敌;,}
}
代码> ,
怎么解析JUC下CountDownLatch, CyclicBarrier,信号量,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<节>在JUC下包含了一些常用的同步工具类,今天就来详细介绍一下,CountDownLatch, CyclicBarrier,信号量的使用方法以及它们之间的区别。
一、CountDownLatch
先看一下,CountDownLatch源码的官方介绍。
<图数据工具=癿dnice编辑器”> ,,公共静态void main (String [] args)抛出InterruptedException {,,,,CountDownLatch门闩=new CountDownLatch (2),
,,,,工人w1=新工人(“张三“,2000年,门闩);
,,,,工人w2=新工人(“李四“,3000年,门闩);
,,,,w1.start ();
,,,,w2.start ();
,,,长,开始时间=System.currentTimeMillis ();
,,,,latch.await ();
,,,,System.out.println(“错误全部解决,领导可以给客户交差了,任务总耗时:“+ (System.currentTimeMillis()——开始时间)),
,,}
,,静态类工作者线程延伸{
,,,,字符串名称;
,,,,int工作;
,,,,CountDownLatch门闩;
,,,,公共工人(字符串名称、int想出CountDownLatch门闩){
,,,,,,this.name=名字;
,,,,,这。工作=工作;
,,,,,这。门闩=门闩;
,,,,}
,,,,@Override
,,,,公共空间run () {
,,,,,,System.out.println(名字+“开始修复错误,当前时间:“+自卫队。新日期格式(())),
,,,,,,doWork ();
,,,,,,System.out.println(名字+“结束修复错误,当前时间:“+自卫队。新日期格式(())),
,,,,,,latch.countDown ();
,,,,}
,,,,私人空间doWork () {
,,,,,,尝试{
,,,,,,,,//模拟工作耗时
,,,,,,,,thread . sleep(工作);
,,,,,,}捕捉(InterruptedException e) {
,,,,,,,,e.printStackTrace ();
,,,,,}
大敌;,,}
大敌;,}
}
代码> ,
本来需要5秒完成的任务,两个人3秒就完成了。我只能说,这程序员的工作效率真是太太太高了。
,二,CyclicBarrier
屏障英文是屏障,障碍,栅栏的意思.cyclic是循环的意思,就是说,这个屏障可以循环使用(什么意思,等下我举例子就知道了)。源码官方解释是:
同步援助,让一组线程都等待对方达到一个共同的障碍点。障碍被称为循环,因为它可以重复使用后等待线程被释放。
引用>一组线程会互相等待,直到所有线程都到达一个同步点。这个就非常有意思了,就像一群人被困到了一个栅栏前面,只有等最后一个人到达之后,他们才可以合力把栅栏(屏障)突破。
CyclicBarrier提供了两种构造方法:
<代码>公共CyclicBarrier (int政党){null null null null null null null null
,,这(政党,null);
}
公共CyclicBarrier (int, Runnable barrierAction) {
,,如果(政党& lt;=0)把新IllegalArgumentException ();
,这。方=党;
,这。数=党;
,这。barrierCommand=barrierAction;
}
代码>怎么解析JUC下CountDownLatch CyclicBarrier,信号量