<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    愛睡覺的程序員

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      5 隨筆 :: 0 文章 :: 0 評論 :: 0 Trackbacks

    Java的concurrent包里面的CountDownLatch其實可以把它看作一個計數器,只不過這個計數器的操作是原子操作,同時只能有一個線程去操作這個計數器,也就是同時只能有一個線程去減這個計數器里面的值。

          你可以向CountDownLatch對象設置一個初始的數字作為計數值,任何調用這個對象上的await()方法都會阻塞,直到這個計數器的計數值被其他的線程減為0為止。

          CountDownLatch的一個非常典型的應用場景是:有一個任務想要往下執行,但必須要等到其他的任務執行完畢后才可以繼續往下執行。假如我們這個想要繼續往下執行的任務調用一個CountDownLatch對象的await()方法,其他的任務執行完自己的任務后調用同一個CountDownLatch對象上的countDown()方法,這個調用await()方法的任務將一直阻塞等待,直到這個CountDownLatch對象的計數值減到0為止。

          舉個例子,有五個工人在為老板干活,這個老板有一個習慣,就是當五個工人把一天的活都干完了的時候,他就來檢查所有工人所干的活。

     1 import java.util.Random;
     2 import java.util.concurrent.CountDownLatch;
     3 import java.util.concurrent.ExecutorService;
     4 import java.util.concurrent.Executors;
     5 import java.util.concurrent.TimeUnit;
     6 
     7 public class CountDownLatchTest {
     8 
     9     private static CountDownLatch downLatch = new CountDownLatch(5);
    10 
    11     public static void main(String[] args) {
    12         ExecutorService executorService = Executors.newFixedThreadPool(10);
    13         executorService.submit(new Boss());
    14         executorService.submit(new Worker("1"));
    15         executorService.submit(new Worker("2"));
    16         executorService.submit(new Worker("3"));
    17         executorService.submit(new Worker("4"));
    18         executorService.submit(new Worker("5"));
    19         executorService.shutdown();
    20     }
    21 
    22     static class Worker implements Runnable{
    23         private String name ;
    24 
    25         public Worker(String name){
    26             this.name = name;
    27         }
    28         @Override
    29         public void run() {
    30             try {
    31                 TimeUnit.SECONDS.sleep(new Random().nextInt(10));
    32             } catch (InterruptedException e) {
    33                 e.printStackTrace();
    34             }
    35             System.out.println("工人" + name + ",工作完畢");
    36             downLatch.countDown();
    37         }
    38     }
    39 
    40     static class Boss implements Runnable{
    41 
    42         @Override
    43         public void run() {
    44             try {
    45                 downLatch.await();
    46             } catch (InterruptedException e) {
    47                 e.printStackTrace();
    48             }
    49             System.out.println("Boss 檢查工作");
    50         }
    51     }
    52 }
    53 
    posted on 2015-02-26 15:09 polang 閱讀(124) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产无遮挡裸体免费视频| 色影音免费色资源| 免费永久在线观看黄网站| 亚洲欧美日韩中文无线码| 久久久高清免费视频 | 一级毛片不卡片免费观看| 伊人久久综在合线亚洲91| 免费人妻精品一区二区三区| 亚洲国产成人久久一区久久| 无码日韩人妻AV一区免费l| 亚洲男女内射在线播放| a在线视频免费观看在线视频三区 a毛片成人免费全部播放 | 成人无码精品1区2区3区免费看| 亚洲精品一级无码鲁丝片| 中国极品美軳免费观看| 亚洲精品无码午夜福利中文字幕| 男女拍拍拍免费视频网站| 亚洲精品高清无码视频| 95免费观看体验区视频| 激情综合亚洲色婷婷五月| 狼友av永久网站免费观看| 国产精品小视频免费无限app | 最近国语视频在线观看免费播放 | 久久精品毛片免费观看| 亚洲国产成人手机在线电影bd| 在线观看免费人成视频色| 激情无码亚洲一区二区三区| 亚洲精品视频免费观看| 香蕉免费一区二区三区| 在线亚洲高清揄拍自拍一品区 | 中文字幕亚洲天堂| 一级毛片免费观看| 亚洲av乱码一区二区三区按摩| 亚洲福利中文字幕在线网址| 免费国产99久久久香蕉| 最新亚洲精品国偷自产在线| 中文字幕不卡亚洲| 免费无码AV片在线观看软件| 国产成人自产拍免费视频| 亚洲男人的天堂在线| 免费人成视频在线观看不卡|