<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)  編輯  收藏

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


    網站導航:
     
    主站蜘蛛池模板: 日韩精品内射视频免费观看 | 亚洲AV无码乱码在线观看富二代 | 18禁在线无遮挡免费观看网站| 国产成人免费a在线视频色戒| 亚洲中文字幕乱码熟女在线| 日韩免费精品视频| 亚洲日本va在线观看| 999国内精品永久免费视频| 亚洲国产高清在线精品一区| 青娱乐免费视频在线观看| 精品国产成人亚洲午夜福利| 在线免费一区二区| 美女露100%胸无遮挡免费观看| 亚洲片一区二区三区| 最新国产乱人伦偷精品免费网站| 久久亚洲精品国产精品黑人| 亚洲w码欧洲s码免费| 亚洲综合色7777情网站777| 四虎www免费人成| yellow视频免费看| 亚洲∧v久久久无码精品| 午夜国产精品免费观看| 欧美日韩亚洲精品| 亚洲精品制服丝袜四区| 97久久免费视频| 亚洲精品无码日韩国产不卡av| 亚洲国产精品人人做人人爱| 国产精品免费福利久久| 亚洲三级视频在线| 四虎亚洲国产成人久久精品| 免费在线看黄网站| jiz zz在亚洲| 亚洲一区二区三区自拍公司| 亚洲三级在线免费观看| 老司机午夜性生免费福利| 亚洲精品免费视频| 日本免费福利视频| 久久精品人成免费| 有码人妻在线免费看片| 亚洲精品国产福利片| 亚洲人成无码久久电影网站|