16.Java5的CountDownLatch同步工具

 1 import java.util.concurrent.CountDownLatch;
 2 import java.util.concurrent.ExecutorService;
 3 import java.util.concurrent.Executors;
 4 
 5 /**
 6  * 16.Java5的CountDownLatch同步工具
 7  * 犹如倒计时计数器,调用CountDownLatch对象的CountDown方法就将计数器减1,
 8  * 当计数到达0事,则所有等待者或单个等待着开始执行。
 9  * 
10  * @author LiTaiQing
11  *
12  */
13 public class CountdownLatchTest {
14 
15     public static void main(String[] args) {
16         ExecutorService service = Executors.newCachedThreadPool();
17         final CountDownLatch cdOrder = new CountDownLatch(1);
18         final CountDownLatch cdAnswer = new CountDownLatch(3);
19         for (int i = 0; i < 3; i++) {
20             Runnable runnable = new Runnable() {
21                 public void run() {
22                     try {
23                         System.out.println("线程"
24                                 + Thread.currentThread().getName() + "正准备接受命令");
25                         cdOrder.await();
26                         System.out.println("线程"
27                                 + Thread.currentThread().getName() + "已接受命令");
28                         Thread.sleep((long) (Math.random() * 10000));
29                         System.out
30                                 .println("线程"
31                                         + Thread.currentThread().getName()
32                                         + "回应命令处理结果");
33                         cdAnswer.countDown();
34                     } catch (Exception e) {
35                         e.printStackTrace();
36                     }
37                 }
38             };
39             service.execute(runnable);
40         }
41         try {
42             Thread.sleep((long) (Math.random() * 10000));
43 
44             System.out.println("线程" + Thread.currentThread().getName()
45                     + "即将发布命令");
46             cdOrder.countDown();
47             System.out.println("线程" + Thread.currentThread().getName()
48                     + "已发送命令,正在等待结果");
49             cdAnswer.await();
50             System.out.println("线程" + Thread.currentThread().getName()
51                     + "已收到所有响应结果");
52         } catch (Exception e) {
53             e.printStackTrace();
54         }
55         service.shutdown();
56 
57     }
58 }

 

posted @ 2015-07-16 13:13  登高一呼  阅读(180)  评论(0编辑  收藏  举报