<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)航:
     
    主站蜘蛛池模板: 国产免费拔擦拔擦8X高清在线人| 在线亚洲v日韩v| 免费一区二区三区| 亚洲国产另类久久久精品小说 | 亚洲一区中文字幕在线观看| 三年片在线观看免费大全电影| 久久精品亚洲综合| 在线免费观看国产| 亚洲无人区码一二三码区别图片| 成年女人喷潮毛片免费播放| 亚洲人成网站18禁止| 日韩电影免费在线观看视频| 无码色偷偷亚洲国内自拍| 免费v片视频在线观看视频| 日韩一区二区三区免费播放| 久久国产成人精品国产成人亚洲| 国产又黄又爽又大的免费视频| 人人狠狠综合久久亚洲婷婷| 182tv免费视视频线路一二三| 国产亚洲sss在线播放| 国产成人无码a区在线观看视频免费| 污视频网站免费观看| 亚洲精品国产美女久久久| 91福利免费体验区观看区| 亚洲午夜理论片在线观看| 天堂亚洲免费视频| 最近免费mv在线观看动漫 | 亚洲一区二区三区自拍公司| 久爱免费观看在线网站| 亚洲综合成人婷婷五月网址| 国产精品免费视频一区| a级毛片毛片免费观看久潮| 亚洲成a人片77777群色| 国产精品冒白浆免费视频| 97超高清在线观看免费视频| 亚洲香蕉久久一区二区| 久久亚洲国产精品123区| 真人做A免费观看| 一本大道一卡二大卡三卡免费 | 国产不卡免费视频| 中文字幕免费视频|