目录
一、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
关注
打赏
热门博文
- Netty—— 概念剖析(NIO vs BIO)
- Netty——网络编程 NIO(Selector处理accept事件)代码示例
- CompletableFuture异步编排(多任务组合)
- CompletableFuture异步编排(两任务组合——两个任务必须都完成才触发另一个任务 )
- CompletableFuture异步编排(线程串行化代码示例)
- CompletableFuture异步编排(handle最终处理)
- CompletableFuture异步编排(计算完成回调代码示例)
- hutool工具导出excel代码示例
- CompletableFuture异步编排(开启异步编程代码示例)
- java 获取音频、视频文件时长代码示例