<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

    線程--CyclicBarrier

    Posted on 2009-12-23 23:38 啥都寫點 閱讀(1779) 評論(0)  編輯  收藏 所屬分類: J2SE

        本例介紹第三個同步裝置:CyclicBarrier,它維護一個計數器,與CountDownLatch不同的是,等待這個CyclicBarrier的線程必須等到計數器到達某個值時,才可以繼續。CyclicBarrier就像它名字的意思一樣,可看成是個障礙,所有的線程必須到齊后才能一起通過這個障礙。本例實現一個數組相鄰元素的加法,一個線程給數組的第一個元素賦值,然后等待其他線程給數組第二個元素賦值,然后將第一個元素和第二個元素相加。


           構造CyclicBarrier對象時,需要指定計數器的目標值,計數器的初始值為0.還可以在構造方法中帶一個Runnable參數,表示當計數器到達目標值時,在等待CyclicBarrier的線程被喚醒之前,指定該Runnable任務。
           CyclicBarrier的await方法使當前線程進入等待狀態,計數器加1,當計數器到達目標值時,當前線程被喚醒。


    import java.util.Random;
    import java.util.concurrent.CyclicBarrier;

    /**
     * CyclicBarrier類似于CountDownLatch也是個計數器,
     * 不同的是CyclicBarrier數的是調用了CyclicBarrier.await()進入等待的線程數,
     * 當線程數達到了CyclicBarrier初始時規定的數目時,所有進入等待狀態的線程被喚醒并繼續。
     * CyclicBarrier就象它名字的意思一樣,可看成是個障礙,
     * 所有的線程必須到齊后才能一起通過這個障礙。
     * CyclicBarrier初始時還可帶一個Runnable的參數,
     * 此Runnable任務在CyclicBarrier的數目達到后,所有其它線程被喚醒前被執行。
     
    */

    public class CyclicBarrierTest {

        
    public static class ComponentThread implements Runnable {
            CyclicBarrier barrier;
    // 計數器
            int ID;    // 組件標識
            int[] array;    // 數據數組

            
    // 構造方法
            public ComponentThread(CyclicBarrier barrier, int[] array, int ID) {
                
    this.barrier = barrier;
                
    this.ID = ID;
                
    this.array = array;
            }


            
    public void run() {
                
    try {
                    array[ID] 
    = new Random().nextInt(100);
                    System.out.println(
    "Component " + ID + " generates: " + array[ID]);
                    
    // 在這里等待Barrier處
                    System.out.println("Component " + ID + " sleep");
                    barrier.await();
                    System.out.println(
    "Component " + ID + " awaked");
                    
    // 計算數據數組中的當前值和后續值
                    int result = array[ID] + array[ID + 1];
                    System.out.println(
    "Component " + ID + " result: " + result);
                }
     catch (Exception ex) {
                }

            }

        }

        
    /**
         * 測試CyclicBarrier的用法
         
    */

        
    public static void testCyclicBarrier() {
            
    final int[] array = new int[3];
            CyclicBarrier barrier 
    = new CyclicBarrier(2new Runnable() {
                
    // 在所有線程都到達Barrier時執行
                public void run() {
                    System.out.println(
    "testCyclicBarrier run");
                    array[
    2= array[0+ array[1];
                }

            }
    );

            
    // 啟動線程
            new Thread(new ComponentThread(barrier, array, 0)).start();
            
    new Thread(new ComponentThread(barrier, array, 1)).start();
        }


        
    public static void main(String[] args) {
            CyclicBarrierTest.testCyclicBarrier();
        }

    }



                                                                                                           --    學海無涯
            

    主站蜘蛛池模板: 亚洲成a人片在线观看久| 精品亚洲aⅴ在线观看| 13小箩利洗澡无码视频网站免费 | 国产偷窥女洗浴在线观看亚洲 | 国产精品视频免费| 免费人成再在线观看网站| 亚洲精品V欧洲精品V日韩精品 | 狠狠热精品免费观看| 国产亚洲无线码一区二区| 久久精品免费一区二区喷潮 | 久久午夜伦鲁片免费无码| 亚洲av无码兔费综合| 亚洲人成亚洲精品| 亚洲AⅤ永久无码精品AA| 最近在线2018视频免费观看| 羞羞网站免费观看| 亚洲国产人成在线观看| 伊人亚洲综合青草青草久热| 99精品全国免费观看视频| 热99RE久久精品这里都是精品免费| 亚洲色无码专区一区| 亚洲天堂中文资源| 国产精品V亚洲精品V日韩精品| 国产99视频精品免费观看7| 国产在线观看免费av站| 久久久亚洲精华液精华液精华液| 亚洲精品影院久久久久久| 亚洲综合在线另类色区奇米| 国产免费午夜a无码v视频| 一二三四影视在线看片免费| 久久青草91免费观看| EEUSS影院WWW在线观看免费| 亚洲AV色欲色欲WWW| 亚洲欧洲日韩极速播放| 亚洲沟沟美女亚洲沟沟| 亚洲ⅴ国产v天堂a无码二区| 亚洲中文字幕在线乱码| 亚洲一区二区三区免费| 亚洲AⅤ无码一区二区三区在线| 波多野结衣久久高清免费 | 亚洲另类精品xxxx人妖|