您的位置:首页 > 编程语言 > Java开发

java.util.concurrent.CountDownLatch

2015-11-25 15:44 441 查看
/*
* 一组线程,等待另一组线程。
*
*/
public class CountDownLatchDemo {

public static void main(String[] args) throws InterruptedException {
final CountDownLatch cdl = new CountDownLatch(1);
final CountDownLatch cdl2 = new CountDownLatch(3);
// 裁判
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("预备:");
//此处倒计时3秒
for (int i = 3; i >= 1; i--) {
System.out.println(i + "...");
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("跑!");
// 计数器 减1,此时在cdl上等待的运动员线程等待状态被解除,开始执行
cdl.countDown();
}
}).start();
// 运动员
for (int i = 0; i < 3; i++) {
new Thread(new Runnable() {

@Override
public void run() {
try {
cdl.await(); // 等待,直到计数器变为0(也就是倒数结束)为止
System.out.println(Thread.currentThread().getName()	+ ":启动了...");
TimeUnit.SECONDS.sleep(new Random().nextInt(5)+1);
System.out.println("--》"+Thread.currentThread().getName() + ":到达终点了...");
//计数器减1,三个运动员线程启动完毕之后,在cdl2上等待的宣布成绩线程解除等待状态
cdl2.countDown();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}

new Thread(new Runnable() {
@Override
public void run() {
try {
cdl2.await();
System.out.println("宣布成绩!");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}

结果:

预备:
3...
2...
1...
跑!
Thread-2:启动了...
Thread-1:启动了...
Thread-3:启动了...
--》Thread-2:到达终点了...
--》Thread-3:到达终点了...
--》Thread-1:到达终点了...
宣布成绩!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: