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

后蜀开始
北汉开始
南汉开始
南唐开始
赵匡胤黄袍加身
后周灭亡
宋代开始发动统一战争!
南汉灭亡
北汉灭亡
南唐灭亡
后蜀灭亡

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值