• 并发控制-CycliBarrier


    我们可以将CycliBarrier直译为循环栅栏,本文介绍下CycliBarrier的基本用法等。

    CycliBarrier可以实现和CountDownLatch类似的功能,下文我们从代码实例和不同点进行解释说明。

    不同点

    CountDownLatch作用于事件,CycliBarrier作用于线程;

    CycliBarrier可以重用

    实例代码

      下文我们详细通过一个集合出发的实例去说明,代码如下

      

    package com.yang.concurrent;
    
    import javax.management.relation.RoleUnresolved;
    import java.util.Random;
    import java.util.concurrent.BrokenBarrierException;
    import java.util.concurrent.CyclicBarrier;
    
    public class CylicBarrierDemo {
        public static void main(String[] args) {
            CyclicBarrier cyclicBarrier=new CyclicBarrier(5, new Runnable() {
                @Override
                public void run() {
                    System.out.println("所有人都到齐了,大家可以出发了");
                }
            });
            for (int i = 0; i < 10; i++) {
                new Thread(new Task(i,cyclicBarrier)).start();
            }
        }
        static class Task implements Runnable{
            private int id;
            private CyclicBarrier cyclicBarrier;
    
            public Task(int id, CyclicBarrier cyclicBarrier) {
                this.id = id;
                this.cyclicBarrier = cyclicBarrier;
            }
    
            @Override
            public void run() {
                System.out.println(this.id+"开始前往集合地点");
                try {
                    Thread.sleep((long)(Math.random()*10000));
                    System.out.println(this.id+"到达了集合地点");
                    cyclicBarrier.await();
                    System.out.println(this.id+"出发了");
    
    
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }
    
            }
        }
    }
    

      运行结果如下:我们发现CycliBarrier是可以被重置的。

      

    0开始前往集合地点
    1开始前往集合地点
    2开始前往集合地点
    3开始前往集合地点
    4开始前往集合地点
    5开始前往集合地点
    6开始前往集合地点
    7开始前往集合地点
    8开始前往集合地点
    9开始前往集合地点
    8到达了集合地点
    4到达了集合地点
    5到达了集合地点
    3到达了集合地点
    7到达了集合地点
    所有人都到齐了,大家可以出发了
    7出发了
    8出发了
    5出发了
    4出发了
    3出发了
    6到达了集合地点
    2到达了集合地点
    9到达了集合地点
    1到达了集合地点
    0到达了集合地点
    所有人都到齐了,大家可以出发了
    0出发了
    6出发了
    1出发了
    2出发了
    9出发了
    

      

  • 相关阅读:
    JMeter 参数化
    Jmeter 录制脚本(二)
    转:JMeter压力测试及并发量计算
    转:系统的平均并发用户数和并发数峰值如何估算
    Jmeter 录制脚本(一)
    用mfix模拟流化床时压力边界条件和迭代步长需要注意的问题
    Everything开机自启
    用fluent模拟内循环床气化燃烧(调试过程记录)
    ubuntu配置
    shell 命令合并文本
  • 原文地址:https://www.cnblogs.com/cnxieyang/p/12775355.html
Copyright © 2020-2023  润新知