隨筆-3  評論-0  文章-0  trackbacks-0
          使用CountDownLatch可以保證指定線程數的順利完成,如下:

          public
           class CountDownLatchTest {
              
          static int N=5;//指定需要等待完成的線程數
              
              
          static CountDownLatch cdl=new CountDownLatch(N);
              
              
          static List list=new ArrayList();
              
              
          public static void main(String[] args) {
                  for(int i=0;i<N;i++){
                      
          new Thread(new countDownLatchRunnable(i),"Thread_"+i).start();
                  }
                  
          try {
                      cdl.await();
          //等待在cdl.countDown()之前進行的操作都順利完成
                  } catch (InterruptedException e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
                  System.out.println(
          "LIST_1 size["+list.size()+"]");//希望獲得是size>=5
              }
              
              
          static class countDownLatchRunnable implements Runnable{
                  
          int num;
                  
                  countDownLatchRunnable(
          int num){
                      
          this.num=num;
                  }
                  
                  @Override
                  
          public void run() {
                      doWork();
          //而在cdl.countDown()之前的操作,則在調用await()時,則會等待該部分操作完成
                      cdl.countDown();
                      list.add(num);
          //如果在cdl.countDown()后添加操作,那么在cdl.await()處并不會等待該部分操作完成,而是會有競爭
                  }
                  
          private void doWork(){
                      
          //執行其他工作
                      list.add(num);
                  }
              }
          }

          如果不使用
          CountDownLatch,那么在main線程和其他線程都是處于競爭關系,最后的size結果可能也是隨機存在的


          posted on 2010-07-14 16:04 QZZF 閱讀(153) 評論(0)  編輯  收藏
          主站蜘蛛池模板: 贡嘎县| 白城市| 铁岭县| 黔西县| 石阡县| 德化县| 永胜县| 新绛县| 仁化县| 亚东县| 同德县| 定兴县| 江油市| 永昌县| 马尔康县| 宁陕县| 遵义县| 巴彦淖尔市| 海阳市| 通化市| 建昌县| 额济纳旗| 锡林郭勒盟| 大宁县| 灵石县| 鲁甸县| 惠来县| 衡山县| 建平县| 潍坊市| 曲麻莱县| 余庆县| 松原市| 广汉市| 南投市| 万年县| 灵川县| 乌海市| 铁岭县| 高密市| 上杭县|