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

Java5 多线程(六)--CountDownLatch 同步工具类

2013-03-20 11:58 811 查看
详细代码如下:
public class CountdownLatchTest {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
final CountDownLatch cdOrder = new CountDownLatch(1);
final CountDownLatch cdAnswer = new CountDownLatch(3);
for (int i = 0; i < 3; i++) {
Runnable runnable = new Runnable() {
public void run() {
try {
System.out.println("线程"
+ Thread.currentThread().getName() + "正准备接受命令");

cdOrder.await();//直到cdOrder的计数器归0,才能往下执行
//如果把这个程序比喻成一个3个运动员在比赛,还有一个裁判
//cdOrder的计数器归0,表明裁判名枪了,运动员可以跑了.
System.out.println("线程"
+ Thread.currentThread().getName() + "已接受命令");
Thread.sleep((long) (Math.random() * 10000));
System.out.println("线程"
+ Thread.currentThread().getName()
+ "回应命令处理结果");
cdAnswer.countDown();//每一个运动员到此计数器就减一,
} catch (Exception e) {
e.printStackTrace();
}
}
};
service.execute(runnable);
}
try {
Thread.sleep((long) (Math.random() * 10000));
System.out.println("线程" + Thread.currentThread().getName()
+ "即将发布命令");
cdOrder.countDown();//cdOrder的计数器减1,
System.out.println("线程" + Thread.currentThread().getName()
+ "已发送命令,正在等待结果");
cdAnswer.await();//cdAnswer直到计数器为0,也就是上面三个线程执行完毕,
//裁判就可以公布成绩了
System.out.println("线程" + Thread.currentThread().getName()
+ "已收到所有响应结果");
} catch (Exception e) {
e.printStackTrace();
}
service.shutdown();
}
}
执行结果如下:



转载请注明出处 : http://blog.csdn.net/johnny901114/article/details/8695726
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: