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
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
相关文章推荐
- Java多线程之同步工具类(CountDownLatch、CyclicBarrier、Semaphore)
- Java5 多线程(六)--CountDownLatch 同步工具类
- 同步工具类 java.util.concurrent.CountDownLatch
- 同步工具类一:闭锁(java.util.concurrent.CountDownLatch)
- java.util.concurrent包下同步辅助工具类CountDownLatch
- 【Java多线程与并发库】14.java5的CountDownLatch同步工具
- 【Java多线程】JUC包下的工具类CountDownLatch、CyclicBarrier和Semaphore
- Java多线程编程之CountDownLatch同步工具使用实例
- Java并发之CountDownLatch 多功能同步工具类
- 一直被忽略的java 多线程并发工具类 CountDownLatch、Semaphore
- 多线程 : CountDownLatch 同步工具类 用法
- java同步工具类之CountDownLatch
- Java并发:同步工具类详解(CountDownLatch、CyclicBarrier、Semaphore)
- 12____java线程同步工具类之同步计数器(CountDownLatch)
- Java并发编程之2——同步工具类的使用(CountDownLatch,CyclicBarrier,BlockungQueue,Semaphore)
- 同步工具类一:闭锁(java.util.concurrent.CountDownLatch)
- Java多线程之~~~使用CountDownLatch来同步多个线程实现一个任务
- JAVA多线程两个实用的辅助类(CountDownLatch和AtomicBoolean)
- Java并发编程的4个同步辅助类(CountDownLatch、CyclicBarrier、Semphore、Phaser)
- java同步使用的CountDownLatch