用CyclicBarrier聊聊趙匡胤建立北宋,一統天下的過程

一個同步輔助類,它允許一組線程互相等待,直到到達某個公共屏障點 (common barrier point)。
在涉及一組固定大小的線程的程序中,這些線程必須不時地互相等待,此時 CyclicBarrier 很有用。
因爲該 barrier 在釋放等待線程後可以重用,所以稱它爲循環 的 barrier。

1、用枚舉表示前政權和地方割據政權

import lombok.Getter;

public enum AfterTangEmpire {

    ONE(1,"後蜀"),  TOW(2,"南漢"),
    THIRD(3,"北漢"),FOUR(4,"南唐");

    @Getter
    private int empireId;
    @Getter
    private String empireName;

    AfterTangEmpire(int empireId, String empireName) {
        this.empireId = empireId;
        this.empireName = empireName;
    }

    public static String forEach_AfterTangEmpire(int index) {
        AfterTangEmpire[] empires = AfterTangEmpire.values();
        String name = null;
        for (AfterTangEmpire e: empires
             ) {
            if(e.empireId == index) {
                name = e.empireName;
        }
        }
        return name;
    }
}

2、趙哥登場,滅國戰爭開始

package com.miller.mybatis.testLock;

import org.omg.PortableServer.THREAD_POLICY_ID;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.TimeUnit;

/**
 * @program: mybatis
 * @description: 到期後,才能讓宋代登場
 * @author: Miller.FAN
 * @create: 2019-11-14 13:40
 **/
public class CyclicBarrierDemo {

    public static void main(String[] args) {
        CyclicBarrier cyclicBarrier = new CyclicBarrier(4, ()->{
            System.out.println("趙匡胤黃袍加身");
            System.out.println("後周滅亡");
            System.out.println("宋代開始發動統一戰爭!");
        });

        for (int i = 1; i < 5; i++) {
            new Thread(()-> {
                try {
                    System.out.println( Thread.currentThread().getName() + "開始");
                    cyclicBarrier.await();
                    TimeUnit.SECONDS.sleep(3);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                } finally {
                    System.out.println( Thread.currentThread().getName() + "滅亡");
                }
            },AfterTangEmpire.forEach_AfterTangEmpire(i)).start();
        }
        cyclicBarrier.isBroken();

    }
}

3、小總結

CyclicBarrier可以控制某線程執行之前,若干線程進入阻塞狀態。等待,一直到初始化時傳入的Runabble接口類型引用的任務執行完畢才能繼續執行。

在這裏的意思就是趙匡胤不當皇帝,後蜀、南漢、北漢、南唐這些政權只能建立,不許滅亡。

    ONE(1,"後蜀"),  TOW(2,"南漢"),
    THIRD(3,"北漢"),FOUR(4,"南唐");

4、測試結果

後蜀開始
北漢開始
南漢開始
南唐開始
趙匡胤黃袍加身
後周滅亡
宋代開始發動統一戰爭!
南漢滅亡
北漢滅亡
南唐滅亡
後蜀滅亡

 

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