<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();
        }

    }

     

                                                                                                           --    學海無涯
            

    主站蜘蛛池模板: 波多野结衣在线免费观看| 两个人www免费高清视频| 四虎在线最新永久免费| 久久国产亚洲观看| 波多野结衣免费一区视频| 亚洲精品无码久久久久去q| 巨胸喷奶水视频www免费视频| 亚洲精品第一国产综合精品99| 免费的黄色网页在线免费观看| 免费不卡中文字幕在线| 免费看又黄又爽又猛的视频软件| 亚洲国产精品成人网址天堂| www.av在线免费观看| 亚洲无码在线播放| 免费看少妇高潮成人片| 亚洲尹人九九大色香蕉网站| 99国产精品永久免费视频| 亚洲AV成人一区二区三区在线看| 69成人免费视频无码专区| 精品国产亚洲一区二区三区在线观看 | 亚洲一级特黄特黄的大片| 我想看一级毛片免费的| 婷婷亚洲综合一区二区 | 亚洲成A人片777777| 一级毛片免费播放| 亚洲一级片在线播放| 四虎永久在线免费观看| a级特黄毛片免费观看| 久久久久亚洲av无码专区 | 亚洲?v无码国产在丝袜线观看| 国产精品福利片免费看| 亚洲精品视频在线| 免费无码黄网站在线观看| 国产精品青草视频免费播放| 久久精品a亚洲国产v高清不卡 | 亚洲91精品麻豆国产系列在线| 国产成人免费全部网站| 97人妻精品全国免费视频| 亚洲色欲色欲www| 自拍偷自拍亚洲精品被多人伦好爽| 97在线视频免费公开观看|