《黑马程序员》 并发库中的CountDownLatch的小示例
2014-04-02 09:54
267 查看
------- android培训、java培训、期待与您交流! ----------
public class CountDownLatch { /** * CountDownLatch *它有一个初始值。调用它内部的方法countDown可以把它的值给-1 这样。当它的值到达0之后接着干下一件事情: 可以1人通知多人 也可以多人通知1人 A B C(运动员等待指令) --------------------------------------- 10--9--8--7--6--5--4--3--2--1--0 (指令员下令) || start A B C (冲啊) | | | | | | V V V 10--9--8--7--6--5--4--3--2--1--0 (CA-1) 10--9--8--7--6--5--4--3--2--1--0 (CB-1) 10--9--8--7--6--5--4--3--2--1--0 (CB-1) | | | | | | V V V --------------------------------------- 指令员根据时间来进行裁判 */ public static void main(String[] args) { //我们来做一个比赛的活动 ExecutorService pool=Executors.newCachedThreadPool(); //指令员所使用的计数器 final java.util.concurrent.CountDownLatch cd1=new java.util.concurrent.CountDownLatch(1); //运动员所使用计数器。它在到达目的地的第一时间把计数器置为0。指令员通过这个时间来裁判他们的成绩 final java.util.concurrent.CountDownLatch cd2=new java.util.concurrent.CountDownLatch(3); //往线程池添加三个任务 for(int i=0;i<3;i++){ Runnable run=new Runnable() { @Override public void run() { try{ //获取线程编号 String threadMsg=Thread.currentThread().getName(); //pool-1-thread-1 从最后一个-开始截取 String athletes="运动员" +threadMsg.substring(threadMsg.lastIndexOf('-')+1); System.out.println(athletes + "准备就绪,正在等待出发命令"); cd1.await(); // 让第一个计数器处于等待状态 System.out.println(athletes + "已接受到指令,出发...."); Thread.sleep((long) (Math.random() * 10000)); System.out.println(athletes + "到达终点,准备返回数据"); cd2.countDown(); // 计数器-1 ,每个线程都-1,三个全线全部-1即三个线程任务执行完毕之后结果就是0了 }catch(Exception e){ e.printStackTrace(); } } }; pool.execute(run); } try{ Thread.sleep((long)(Math.random()*10000)); System.out.println("指令员准备下达命令,准备进入比赛倒计时"); cd1.countDown(); //把时间计数器-1 System.out.println("指令员已下达开始指令"); cd2.await(); //让第二个计数器处于等待,收到结果之后才开始下一步的操作 System.out.println("指令员已经收到所有参赛人员的返回结果,准备根据结果裁判"); }catch(Exception e){ e.printStackTrace(); } } } /** * 运动员1准备就绪,正在等待出发命令 运动员2准备就绪,正在等待出发命令 运动员3准备就绪,正在等待出发命令 指令员准备下达命令,准备进入比赛倒计时 指令员已下达开始指令 运动员1已接受到指令,出发.... 运动员2已接受到指令,出发.... 运动员3已接受到指令,出发.... 运动员2到达终点,准备返回数据 运动员3到达终点,准备返回数据 运动员1到达终点,准备返回数据 指令员已经收到所有参赛人员的返回结果,准备根据结果裁判 */
相关文章推荐
- #无私分享《传智播客2011版。net平台c#视频》全套哦30.7G
- java并发学习之CountDownLatch
- CountDownLatch和CyclicBarrier的区别
- 黑马程序员宣传语征集大赛
- 黑马程序员-------关于今天的一个程序学习心得
- 黑马程序员
- 黑马程序员:java基础——OOP面向对象的特征
- 黑马程序员 JAVASE——this.super关键字用法小结
- 黑马程序员 JAVASE——final和static关键字
- 黑马程序员 JAVASE——单例设计模式
- 黑马程序员 JAVASE——内部类
- 黑马程序员 JAVASE——多线程安全(并发问题和死锁等)
- 黑马程序员 JAVASE——String
- 黑马程序员 java基础加强——jdk1.5新特性—枚举
- 黑马程序员 JAVA提高——反射
- 黑马程序员 java提高——张孝详交通灯管理系统
- 黑马程序员 java提高——张孝祥银行业务调度系统
- 黑马程序员--Java基础--01函数
- 黑马程序员--Java基础--02数组
- 黑马程序员--Java基础--03面向对象(1)