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

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

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

    Cyh的博客

    Email:kissyan4916@163.com
    posts - 26, comments - 19, trackbacks - 0, articles - 220

    線程--CountDownLatch

    Posted on 2009-12-23 23:20 啥都寫點 閱讀(464) 評論(0)  編輯  收藏 所屬分類: J2SE
          本例介紹第二種同步裝置:CountDownLatch,它維護一個計數器,等待這個CountDownLatch的線程必須等到計數器為0時才可以繼續。本例模擬服務器的啟動,假設啟動一個服務器需要初始化3個組件,當3個組件初始化完畢時,服務器才算成功啟動。

          構造CountDownLatch對象時,需要制定計數器的初始值,該值必須大于等于0,一旦對象被創建,其初始值將不能被改變。
          CountDownLatch的await方法使當前線程進入等待狀態,直到計數器為0.
          CountDownLatch的countDown方法使計數器減1.


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

    /**
     * CountDownLatch是個計數器,它有一個初始數,
     * 等待這個計數器的線程必須等到計數器倒數到零時才可繼續。
     
    */

    public class CountDownLatchTest {

        
    /**
         * 初始化組件的線程
         
    */

        
    public static class ComponentThread implements Runnable {
            
    // 計數器
            CountDownLatch latch;
            
    // 組件ID
            int ID;

            
    // 構造方法
            public ComponentThread(CountDownLatch latch, int ID) {
                
    this.latch = latch;
                
    this.ID = ID;
            }


            
    public void run() {
                
    // 初始化組件
                System.out.println("Initializing component " + ID);
                
    try {
                    Thread.sleep(
    500 * ID);
                }
     catch (InterruptedException e) {
                }

                System.out.println(
    "Component " + ID + " initialized!");
                
    //將計數器減一
                latch.countDown();
            }

        }


        
    /**
         * 啟動服務器
         
    */

        
    public static void startServer() throws Exception {
            System.out.println(
    "Server is starting.");
            
    //初始化一個初始值為3的CountDownLatch
            CountDownLatch latch = new CountDownLatch(3);
            
    //起3個線程分別去啟動3個組件
            ExecutorService service = Executors.newCachedThreadPool();
            service.submit(
    new ComponentThread(latch, 1));
            service.submit(
    new ComponentThread(latch, 2));
            service.submit(
    new ComponentThread(latch, 3));
            service.shutdown();

            
    //等待3個組件的初始化工作都完成
            latch.await();

            
    //當所需的三個組件都完成時,Server就可繼續了
            System.out.println("Server is up!");
        }


        
    public static void main(String[] args) throws Exception {
            CountDownLatchTest.startServer();
        }

    }

     

                                                                                                           --    學海無涯
            

    主站蜘蛛池模板: 精品无码AV无码免费专区| 免费一级毛片在线播放视频免费观看永久| 一级毛片免费毛片毛片| gogo全球高清大胆亚洲| 国产亚洲福利一区二区免费看| 永久黄网站色视频免费观看| 亚洲AV无码国产一区二区三区| 日韩免费电影在线观看| 亚洲av无码一区二区三区人妖| 国产大片91精品免费看3| 污污视频免费观看网站| 亚洲国产综合精品一区在线播放| 最近免费中文字幕视频高清在线看| 亚洲同性男gay网站在线观看| 午夜网站免费版在线观看| 亚洲AV无码国产剧情| 亚洲国产av无码精品| 三年片免费高清版| 免费一级做a爰片久久毛片潮喷| 911精品国产亚洲日本美国韩国 | 女同免费毛片在线播放| 久久亚洲国产欧洲精品一| 中文字幕在线观看免费视频| 亚洲乱码在线观看| 亚洲国产成人久久精品99| 野花香高清视频在线观看免费| 综合自拍亚洲综合图不卡区| 成年女人18级毛片毛片免费观看| 特级毛片aaaa级毛片免费| 亚洲AV中文无码乱人伦下载| 国产va精品免费观看| 免费精品国产自产拍在线观看| 国产亚洲综合久久系列| 国产麻豆视频免费观看 | 91成人免费观看在线观看| 亚洲经典在线观看| 亚洲精品tv久久久久久久久久| 日本免费高清视频| 国产亚洲精品AAAA片APP| 精品亚洲综合在线第一区| 色婷婷7777免费视频在线观看|