`
jiangwenfeng762
  • 浏览: 286396 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java的CountDownLatch用法

 
阅读更多

关于java的CountDownLatch。Latch:门闩之意。

CountDownLatch经常用来在多线程环境下,主线程协调多个子线程的步调。生活中最相似的场景就是运动员比赛,裁判员(主线程)控制比赛的开始和结束,运动员(子线程)完成自己的比赛,当且仅当所有运动员都完成比赛时,裁判员就可以下令整场比赛结束。下面转载网友针对上述场景的模拟代码,以便更好地理解CountDownLatch的使用。

import java.util.concurrent.CountDownLatch;
2  import java.util.concurrent.Executor;
3  import java.util.concurrent.ExecutorService;
4  import java.util.concurrent.Executors;
5 
6  publicclass CountDownLatchDemo {
7 privatestaticfinalint PLAYER_AMOUNT =5;
8 public CountDownLatchDemo() {
10   }
11 /**
12 @param args
13 */
14 publicstaticvoid main(String[] args) {
16 //对于每位运动员,CountDownLatch减1后即结束比赛
17 CountDownLatch begin =new CountDownLatch(1);
18 //对于整个比赛,所有运动员结束后才算结束
19 CountDownLatch end =new CountDownLatch(PLAYER_AMOUNT);
20 Player[] plays =new Player[PLAYER_AMOUNT];
21 
22 for(int i=0;i<PLAYER_AMOUNT;i++)
23 plays[i] =new Player(i+1,begin,end);
24 
25 //设置特定的线程池,大小为5
26 ExecutorService exe = Executors.newFixedThreadPool(PLAYER_AMOUNT);
27 for(Player p:plays)
28 exe.execute(p); //分配线程
29 System.out.println("Race begins!");
30 begin.countDown();//相当于裁判员下令比赛开始
31 try{
32 end.wait(); //等待end状态变为0,即为比赛结束
33 }catch (InterruptedException e) {
35 e.printStackTrace();
36 }finally{
37 System.out.println("Race ends!");
38 }
39 exe.shutdown();
40 }
41 }

接下来是Player类

1 import java.util.concurrent.CountDownLatch;
2 
3 
4 publicclass Player implements Runnable {
5 
6 privateint id;
7 private CountDownLatch begin;
8 private CountDownLatch end;
9 public Player(int i, CountDownLatch begin, CountDownLatch end) {
11 super();
12 this.id = i;
13 this.begin = begin;
14 this.end = end;
15 }
16 
17 @Override
18 publicvoid run() {
20 try{
21 begin.await(); //等待begin的状态为0,相当于运动员已做好准备,等待裁判员宣布比赛开始。
22 Thread.sleep((long)(Math.random()*100)); //随机分配时间,即运动员完成时间
23 System.out.println("Play"+id+" arrived.");
24 }catch (InterruptedException e) {
26 e.printStackTrace();
27 }finally{
28 end.countDown(); //使end状态减1,最终减至0
29 }
30 }
31 }

 

分享到:
评论

相关推荐

    Java中CountDownLatch用法解析

    主要为大家详细介绍了Java中CountDownLatch用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Java并发包之CountDownLatch用法.docx

    CountDownLatch计数器闭锁是一个能阻塞主线程,让其他线程满足特定条件下主线程再继续执行的线程同步工具。 Latch闭锁的意思,是一种同步的工具类。类似于一扇门:在闭锁到达结束状态之前,这扇门一直是关闭着的,不...

    JAVA CountDownLatch(倒计时计数器)用法实例

    主要介绍了JAVA CountDownLatch(倒计时计数器)用法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    CountDownLatch和CyclicBarrier用法实例大全

    《java并发编程》中CountDownLatch和CyclicBarrier用法实例大全,几乎包含了所有重要的用法

    Java中的CountDownLatch类最全讲义

    CountDownLatch的基本用法 2.1 创建CountDownLatch对象 2.2 await()方法 2.3 countDown()方法 实现多线程任务的同步 3.1 场景介绍 3.2 使用CountDownLatch实现同步 主线程等待多个线程完成 4.1 场景介绍 4.2 使用...

    Java线程并发工具类CountDownLatch原理及用法

    主要介绍了Java线程并发工具类CountDownLatch原理及用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    java并发编程三剑客

    目录java并发编程三剑客思维导图CountDownLatch用法构造器以及方法构造器主要方法使用方法CyclicBarrier用法构造器以及主要方法构造器主要方法使用方法Semaphore用法构造器和主要方法构造器主要方法使用方法三种辅助...

    java jdk实列宝典 光盘源代码

    java为数据结构中的映射定义一个接口java.util.Map,有四个实现类HashMap Hashtable LinkedHashMap TreeMap用法和区别;对Map排序; 5字符串 使用String;判断一个字符串是否是合法的java标识符;使用StringBuffer;...

    Java并发编程:CountDownLatch与CyclicBarrier和Semaphore的实例详解

    主要介绍了Java并发编程:CountDownLatch与CyclicBarrier和Semaphore的实例详解的相关资料,需要的朋友可以参考下

    Java进阶教程,面试大全

    Java进阶教程,面试大全1,可参考以下问题: Semaphore-信号灯机制。 synchronized在静态方法和普通方法的区别。 怎么实现所有线程在等待某个事件的发生...CountDownLatch和CyclicBarrier的用法,以及相互之间的差别。

    Java进阶教程,面试大全,包罗万象

    Java进阶教程,面试大全1,可参考以下问题: Semaphore-信号灯机制。 synchronized在静态方法和普通方法的区别。 怎么实现所有线程在等待某个事件的发生...CountDownLatch和CyclicBarrier的用法,以及相互之间的差别。

    thread count

    浅析Java中CountDownLatch用法 CountDownLatch如其所写,是一个倒计数的锁存器,当计数减至0时触发特定的事件。利用这种特性,可以让主线程等待子线程的结束。下面以一个模拟运动员比赛的例子加以说明。 ...

    Java JDK实例宝典

    全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...

    Java服务器端开发面试.doc

    涉及到各种效率问题等,里面最好阅读一下源码 集合的遍历方法和使用iterator来遍历的区别,集合可否修改,能否删除其中的一 个元素,然后size是否变化等等问题 JAVA垃圾回收,内存结构 异常的种类 Object类,哪些...

    java大批量导入excel,多线程加分片处理的dome

    然后,创建一个固定数量的线程池,使用 CountDownLatch 控制主线程等待所有任务完成;最后,循环迭代分片区间,将分片任务提交到线程池中处理。在每个任务中,使用 ReadRowHolder 对象实现分片读取 Excel 数据,并...

    CyclicBarrier用法.docx

    与CountDownLatch不同的是,CyclicBarrier可以重复使用,即当所有线程都到达屏障后,屏障会自动重置,可以继续使用。 CyclicBarrier的构造方法如下: java public CyclicBarrier(int parties, Runnable ...

    Java并发编程(学习笔记).xmind

    (1)用作异步任务使用,且可以使用get方法获取任务的结果 (2)用于表示一些时间较长的计算 状态 等待运行 正在运行 运行完成 使用Callable对象实例化FutureTask类 ...

    javaconcurrent源码-java7-source-code:Java7源码/Concurrency同步

    CountDownLatch 闭锁 AQS 锁的公共类 20180514 String, 部分Character 20180508 除 Set 外, 常用的 Collection 都已经分析完毕 简化语言描述, 增加测试用例(实践用法) 接触到新的类再看源码(不能脱离实际场景瞎看, ...

    java核心知识点整理.pdf

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

Global site tag (gtag.js) - Google Analytics