目录
一、CyclicBarrier的理解
- 一、CyclicBarrier的理解
- 二、CyclicBarrier类中常用的方法
- 三、CyclicBarrier类的使用示例一
- 四、CyclicBarrier类的使用示例二
- CyclicBarrier属于java.util.concurrent包下;
- CyclicBarrier字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行,叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用,我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。
- public int await() :用来挂起当前线程,直至所有线程都到达barrier状态再同时执行后续任务;
- public int await(long timeout, TimeUnit unit):让这些线程等待至一定的时间,如果还有线程没有到达barrier状态就直接让到达barrier的线程执行后续任务。
使用场景,例如有10个人参加会议,等10个人都到齐后,才开始会议。注(示例中每个线程代表一个人。)
1、代码
package com.xz.thread.CyclicBarrier;
import java.util.Random;
import java.util.concurrent.CyclicBarrier;
/**
* @description:
* @author: xz
* @create: 2021-05-30 21:46
*/
public class Demo {
Random random=new Random();
//参加会议方法
public void joinMeet(CyclicBarrier barrier){
try {
Thread.sleep(random.nextInt(4000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" 到达会议室,【等待开会】.......");
try {
//挂起当前线程,直至所有线程都到达barrier状态再同时执行后续任务。
barrier.await();
} catch (Exception e) {
e.printStackTrace();
}
}
//主方法,用于测试
public static void main(String[] args) {
Demo d =new Demo();
//创建一个新的 CyclicBarrier,它将在给定数量的参与者(线程)处于等待状态时启动,
//并在启动 barrier 时执行给定的屏障操作,该操作由最后一个进入 barrier 的线程执行。
CyclicBarrier barrier = new CyclicBarrier(10, new Runnable() {
@Override
public void run() {
System.out.println("10个人已到齐,开始开会。");
}
});
//创建10个线程,每个线程代表一个人开会。
for(int i=0;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?