隨筆-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 閱讀(152) 評論(0)  編輯  收藏
          主站蜘蛛池模板: 平山县| 密云县| 平邑县| 沅陵县| 西青区| 错那县| 蒙城县| 马山县| 常宁市| 汪清县| 中江县| 明水县| 南雄市| 普洱| 芒康县| 永春县| 泰安市| 高青县| 广汉市| 嘉黎县| 绥宁县| 滨州市| 栖霞市| 肥西县| 佳木斯市| 长宁区| 临泽县| 天等县| 海门市| 紫云| 河池市| 额济纳旗| 天水市| 梁河县| 泽州县| 渝中区| 佛坪县| 阿拉善左旗| 南开区| 陆丰市| 凤山市|