隨筆 - 18, 文章 - 0, 評論 - 8, 引用 - 0
          數(shù)據(jù)加載中……

          CountDownLatch 簡單舉例

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

           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

          主站蜘蛛池模板: 玉龙| 长治市| 宁明县| 高雄市| 云龙县| 阳东县| 颍上县| 永昌县| 光泽县| 南部县| 邵阳县| 措美县| 阜康市| 博野县| 神池县| 竹北市| 松桃| 会宁县| 蓬溪县| 南阳市| 九江县| 长丰县| 卓资县| 乌恰县| 丘北县| 青阳县| 玛沁县| 平湖市| 浪卡子县| 南平市| 合江县| 泽州县| 长沙市| 东丰县| 荣成市| 古蔺县| 阿克| 唐山市| 缙云县| 上犹县| 九江市|