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

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

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

    隨筆 - 0, 文章 - 264, 評論 - 170, 引用 - 0
    數(shù)據(jù)加載中……

    CountDownLatch的使用(注:轉載于http://m.tkk7.com/fanjs2000/archive/2012/10/31/390521.html)

    CountDownLatch如其所寫,是一個倒計數(shù)的鎖存器,當計數(shù)減至0時觸發(fā)特定的事件。利用這種特性,可以讓主線程等待子線程的結束。下面以一個模擬運動員比賽的例子加以說明。

    import java.util.concurrent.CountDownLatch;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;

    public class Test {
        
    private static final int PLAYER_AMOUNT = 5;

        
    public static void main(String[] args) {        
            
    //對于每位運動員,CountDownLatch減1后即結束比賽
            CountDownLatch begin = new CountDownLatch(1);
            
    //對于整個比賽,所有運動員結束后才算結束
            CountDownLatch end = new CountDownLatch(PLAYER_AMOUNT);
            Player[] plays 
    = new Player[PLAYER_AMOUNT];

            
    for (int i = 0; i < PLAYER_AMOUNT; i++)
                plays[i] 
    = new Player(i + 1, begin, end);

            
    //設置特定的線程池,大小為5
            ExecutorService exe = Executors.newFixedThreadPool(PLAYER_AMOUNT);
            
    for (Player p : plays)
                exe.execute(p); 
    //分配線程
            begin.countDown();
            System.out.println(
    "Race begins!");
            
    try {
                end.await(); 
    //等待end狀態(tài)變?yōu)?,即為比賽結束
            } catch (InterruptedException e) {
                
    // TODO: handle exception
                e.printStackTrace();
            } 
    finally {
                System.out.println(
    "Race ends!");
            }
            exe.shutdown();
        }
    }

    class Player implements Runnable {

        
    private int id;
        
    private CountDownLatch begin;
        
    private CountDownLatch end;

        
    public Player(int i, CountDownLatch begin, CountDownLatch end) {
            
    // TODO Auto-generated constructor stub
            super();
            
    this.id = i;
            
    this.begin = begin;
            
    this.end = end;
        }

        
    public void run() {
            
    // TODO Auto-generated method stub
            try {
                begin.await(); 
    //等待begin的狀態(tài)為0
                Thread.sleep((long) (Math.random() * 100)); //隨機分配時間,即運動員完成時間
                System.out.println("Play" + id + " arrived.");
            } 
    catch (InterruptedException e) {
                
    // TODO: handle exception
                e.printStackTrace();
            } 
    finally {
                end.countDown(); 
    //使end狀態(tài)減1,最終減至0
            }
        }
    }

    posted on 2012-10-31 17:19 小一敗涂地 閱讀(492) 評論(0)  編輯  收藏 所屬分類: 并發(fā)、多線程java語言相關

    主站蜘蛛池模板: 亚洲精品在线免费观看视频| 国产精品亚洲一区二区无码| 亚洲人成依人成综合网| 日韩亚洲一区二区三区| 91亚洲导航深夜福利| 亚洲 欧洲 日韩 综合在线| 亚洲av永久中文无码精品综合| 成全视成人免费观看在线看| 2019中文字幕在线电影免费| 亚洲黄色免费网站| 日本人的色道免费网站| 久久久久久A亚洲欧洲AV冫| 亚洲成aⅴ人片在线影院八| a级毛片免费观看网站| 欧洲精品成人免费视频在线观看 | 亚洲伊人久久大香线蕉| 色九月亚洲综合网| 69影院毛片免费观看视频在线| 亚洲ⅴ国产v天堂a无码二区| 一级做a爰片久久毛片免费陪 | AV激情亚洲男人的天堂国语| 一本久久综合亚洲鲁鲁五月天| 91精品国产亚洲爽啪在线影院| 国产成人精品免费视频大全麻豆| 亚洲日韩精品无码专区加勒比☆ | 水蜜桃视频在线观看免费播放高清 | 亚洲精品久久无码| 亚洲国产日韩在线观频| 亚洲精品无码国产片| 亚洲一级特黄无码片| 未满十八私人高清免费影院| 国产亚洲一区二区手机在线观看| 蜜桃传媒一区二区亚洲AV| 国产一卡二卡3卡四卡免费| 久久久亚洲欧洲日产国码二区| a级毛片免费观看视频| 亚洲午夜在线一区| 亚洲欧洲日产国码高潮αv| 亚洲免费在线播放| 亚洲精选在线观看| 波多野结衣免费视频观看|