Java線程-障礙器(CyclicBarrier)

Java5當中添加了障礙器,爲了適應一種新的設計需求,比如說一個大型任務,有很多的子任務,只有當子任務都完成了,才能執行主任務,這個時候就需要障礙器。
障礙器是多線程併發控制的一種有效的手段。
示例如下:

public class Thread_CyclicBarrier {
    public static void main(String args[]){
        //創建障礙器,並創建一個主任務MainTask_CyclicBarrier
        CyclicBarrier cyclicBarrier=new CyclicBarrier(6,new MainTask_CyclicBarrier());
        //創建7個子任務
        new SubTask_CyclicBarrier("A",cyclicBarrier).start();
        new SubTask_CyclicBarrier("B",cyclicBarrier).start();
        new SubTask_CyclicBarrier("C",cyclicBarrier).start();
        new SubTask_CyclicBarrier("D",cyclicBarrier).start();
        new SubTask_CyclicBarrier("E",cyclicBarrier).start();
        new SubTask_CyclicBarrier("F",cyclicBarrier).start();
    }
}

/**
 * 主任務
 */
class MainTask_CyclicBarrier implements Runnable{

    @Override
    public void run() {
        System.out.println(">>>>>>主任務執行了<<<<<<<<");
    }
}

/**
 * 子任務
 */
class SubTask_CyclicBarrier extends Thread{
    private String name;//名稱
    private CyclicBarrier cyclicBarrier;//障礙器
    SubTask_CyclicBarrier(String name,CyclicBarrier cyclicBarrier){
        this.name=name;
        this.cyclicBarrier=cyclicBarrier;
    }

    @Override
    public void run() {
        System.out.println("子任務"+name+"開始執行");
        for (int i=0;i<100;i++)
            System.out.println("子任務"+name+"執行完成了,並通知障礙器已經完成");
        try {
            cyclicBarrier.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (BrokenBarrierException e) {
            e.printStackTrace();
        }
    }
}

運行結果如下:
在這裏插入圖片描述
從結果可以看出,只有當所有的子任務完成以後,才能執行主任務,從而達到了控制的目標。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章