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

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

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

    愛睡覺的程序員

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

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

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

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

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

     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 閱讀(125) 評論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 成人a免费α片在线视频网站| 免费看男人j放进女人j免费看| 国产妇乱子伦视频免费| 亚洲AV区无码字幕中文色| a毛看片免费观看视频| 亚洲伊人色欲综合网| 国产无遮挡色视频免费观看性色| 国产L精品国产亚洲区久久| 国产精品久久久久久亚洲小说| 国产精品成人四虎免费视频| 亚洲色无码国产精品网站可下载| 中字幕视频在线永久在线观看免费| 亚洲成a人片在线网站| 成年美女黄网站18禁免费| 亚洲人成色在线观看| 国产免费变态视频网址网站| 黄色一级毛片免费| 亚洲国产精品无码久久一线| 95免费观看体验区视频| 亚洲av日韩av无码av| 免费观看国产精品| 成人A片产无码免费视频在线观看| 亚洲视频在线观看地址| 亚洲免费福利在线视频| 美女视频免费看一区二区| 亚洲人成精品久久久久| 亚洲免费一级视频| 亚洲AV日韩综合一区| 国产精品亚洲а∨无码播放| 亚洲成人免费电影| 国产精品国产亚洲区艳妇糸列短篇| 亚洲人午夜射精精品日韩| 又大又硬又爽又粗又快的视频免费| 亚洲精华液一二三产区| 亚洲日韩精品射精日| 在线观看H网址免费入口| 美女视频黄频a免费观看| 亚洲首页在线观看| 亚洲精品tv久久久久| 精品熟女少妇av免费久久| 美女裸体无遮挡免费视频网站|