用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、测试结果

后蜀开始
北汉开始
南汉开始
南唐开始
赵匡胤黄袍加身
后周灭亡
宋代开始发动统一战争!
南汉灭亡
北汉灭亡
南唐灭亡
后蜀灭亡
发布了85 篇原创文章 · 获赞 21 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41670928/article/details/103066393