<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 啥都寫點 閱讀(469) 評論(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日韩AV无码大全| 日本免费中文字幕| 亚洲国产精品日韩在线观看| 国产无遮挡吃胸膜奶免费看 | 337p日本欧洲亚洲大胆精品555588| 91成人免费观看网站| 99久久亚洲精品无码毛片| 欧洲精品免费一区二区三区| 丝袜足液精子免费视频| 亚洲精品成人无限看| 在线观看视频免费完整版| 日韩亚洲国产高清免费视频| 亚洲精品成人区在线观看| www视频在线观看免费| 亚洲中文字幕在线无码一区二区 | 国产成人亚洲精品| 亚洲日韩中文在线精品第一| 青青青国产在线观看免费网站| 一级毛片免费不卡| 亚洲综合av一区二区三区| 亚洲av无码不卡一区二区三区| 你懂的在线免费观看| 亚洲欧美自偷自拍另类视| 亚洲bt加勒比一区二区| www国产亚洲精品久久久| 免费观看的毛片大全| 好紧我太爽了视频免费国产| 国产精品亚洲综合一区在线观看 | 日韩电影免费在线观看网站| 久久综合亚洲色hezyo| 亚洲国产精品网站久久| 亚洲精品色午夜无码专区日韩| 国产午夜影视大全免费观看| 免费观看黄网站在线播放| 男男黄GAY片免费网站WWW| 国产成人精品日本亚洲专| 亚洲精品免费在线观看| 狠狠色伊人亚洲综合成人| 亚洲一级片免费看|