CountDownLatch
来源:互联网 发布:手机时间轴软件 编辑:程序博客网 时间:2024/06/15 21:26
主要方法
public CountDownLatch(int count);
public void countDown();
public void await() throws InterruptedException
import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.atomic.AtomicInteger;public class CountDownLatchTest { public static void main(String[] args) throws InterruptedException { final AtomicInteger count = new AtomicInteger(0); // 用于计数选手是否准备就绪 // 开始的倒数锁 final CountDownLatch begin = new CountDownLatch(3); // 结束的倒数锁 final CountDownLatch end = new CountDownLatch(10); // 十名选手 final ExecutorService exec = Executors.newFixedThreadPool(10); for (int index = 0; index < 10; index++) { final int NO = index + 1; Runnable run = new Runnable() { public void run() { try { // 如果当前计数为零,则此方法立即返回。 // 等待 System.out.println("No." + NO + " has be ready ! "); count.addAndGet(1); begin.await(); Thread.sleep((long) (Math.random() * 10000)); System.out.println("No." + NO + " arrived"); } catch (InterruptedException e) { } finally { // 每个选手到达终点时,end就减一 end.countDown(); } } }; exec.submit(run); } while(count.get()<10){ } for (int i = 1; i <= 3; i++) { Thread.sleep(1000); System.out.println("ready :" + i); begin.countDown(); if(i==3){ break; } } System.out.println("Game Start"); // begin减一,开始游戏 // 等待end变为0,即所有选手到达终点 end.await(); System.out.println("Game Over"); exec.shutdown(); }}
模拟了100米赛跑,10名选手已经准备就绪,只等裁判一声令下。当所有人都到达终点时,比赛结束console:No.2 has be ready ! No.6 has be ready ! No.8 has be ready ! No.4 has be ready ! No.1 has be ready ! No.9 has be ready ! No.5 has be ready ! No.3 has be ready ! No.7 has be ready ! No.10 has be ready ! ready :1ready :2ready :3Game StartNo.6 arrivedNo.10 arrivedNo.4 arrivedNo.3 arrivedNo.5 arrivedNo.7 arrivedNo.2 arrivedNo.8 arrivedNo.9 arrivedNo.1 arrivedGame Over
0 0
- CountDownLatch
- CountDownLatch
- CountDownLatch
- Countdownlatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch
- CountDownLatch,
- CountDownLatch
- socket.io框架学习
- Unity3d碰撞ios的坑
- Light oj 1002 - Country Roads 迪杰斯特拉变形
- CodeIgniter框架下实现表单传值
- Linux进程学习---孤儿进程和守护进程
- CountDownLatch
- 如何在Mac OS X上安装 Ruby运行环境
- 博弈论(一部分例题)
- Linux进程学习---exit()和_exit()函数
- android中WebView的Java与JavaScript交互
- java的Timer使用
- leetcode 28. Implement strStr()
- 2016SDAU课程练习三1012 Problem L
- java 枚举的使用