隨筆 - 18, 文章 - 0, 評論 - 8, 引用 - 0
          數據加載中……

          CountDownLatch 簡單舉例

          一句話解釋:主線程阻塞,其他線程完成后,主線程被喚醒后繼續執行

           1 import java.util.Random;
           2 import java.util.concurrent.CountDownLatch;
           3 
           4 import org.slf4j.Logger;
           5 import org.slf4j.LoggerFactory;
           6 
           7 public class CountDownLatchLearn {
           8     
           9     private Logger log = LoggerFactory.getLogger(CountDownLatchLearn.class);
          10     private CountDownLatch countDownLatch;
          11     
          12     public CountDownLatchLearn() {
          13         countDownLatch = new CountDownLatch(50);
          14     }
          15     
          16     public void countDown() {
          17         Long count = countDownLatch.getCount();
          18         log.debug("countDownLatch count is:" + count.toString());
          19         
          20         for (int i = 0; i < count; i++) {
          21             Work work = new Work(String.valueOf(i), countDownLatch);
          22             work.start();
          23         }
          24         try {
          25             countDownLatch.await();
          26         } catch (InterruptedException e) {
          27             e.printStackTrace();
          28         }
          29         log.debug("work finish!!!");
          30     }
          31     
          32     private class Work extends Thread {
          33         
          34         private String name;
          35         private CountDownLatch countDownLatch;
          36         
          37         public Work(String name, CountDownLatch countDownLatch) {
          38             this.name = name;
          39             this.countDownLatch = countDownLatch;
          40         }
          41         
          42         @Override
          43         public void run() {
          44             Random r = new Random();
          45             int sleep = r.nextInt(2000);
          46             try {
          47                 log.debug("thread sleep: "+ sleep);
          48                 Thread.sleep(sleep);
          49             } catch (InterruptedException e) {
          50                 e.printStackTrace();
          51             }
          52             log.debug("thread: " + name + ": do work");
          53             countDownLatch.countDown();
          54         }
          55     }
          56 
          57     public static void main(String[] args) {
          58         System.out.println("main start!!!");
          59         
          60         CountDownLatchLearn countDownLatchLearn = new CountDownLatchLearn();
          61         countDownLatchLearn.countDown();
          62         
          63         System.out.println("main end!!!");
          64     }
          65 
          66 }

          posted on 2017-07-13 11:18 丑男 閱讀(315) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 南皮县| 霍城县| 南木林县| 聊城市| 万源市| 广饶县| 沭阳县| 九寨沟县| 河津市| 昭平县| 安西县| 苏州市| 墨竹工卡县| 沂源县| 雷州市| 佛冈县| 临洮县| 神木县| 灵川县| 长沙市| 宁明县| 毕节市| 龙口市| 石城县| 永春县| 搜索| 拉萨市| 巴马| 德安县| 松江区| 武功县| 溧水县| 宁明县| 敦化市| 琼海市| 鄂温| 尉氏县| 定安县| 华池县| 平罗县| 枣强县|