标签:rri java 需要 cli git stat 调用 pac ring
CyclicBarrier,需要等待一组线程全部到达一个指定的点后才能一起执行,就如果开会,需要等人都到齐才开始一样。
创建一个新的 CyclicBarrier ,当给定数量的线程(线程)正在等待时,它将跳闸,当屏障跳闸时执行给定的屏障动作,由最后一个进入屏障的线程执行。
允许一组线程全部等待彼此达到共同屏障点的同步辅助。 循环阻塞在涉及固定大小的线程方的程序中很有用,这些线程必须偶尔等待彼此。 屏障被称为循环 ,因为它可以在等待的线程被释放之后重新使用。
package JavaCore.MultiThread.advanced.ThreadCorrespondence;
import java.util.Random;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
/*******************************************************************************
* @Copyright (C), 2018-2019,github:Swagger-Ranger
* @FileName: ThreadOfCyclicBarrier
* @Author: liufei32@outlook.com
* @Date: 2019/3/12 14:44
* @Description: CyclicBarrier使用示例
* @Aha-eureka:
*******************************************************************************/
public class ThreadOfCyclicBarrier {
Random random = new Random();
public void meeting( CyclicBarrier barrier ) {
try {
Thread.sleep(random.nextInt(4000));
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " 到达,等待会议开始...");
if (Thread.currentThread().getName().equals("Thread-1")) {
throw new RuntimeException("模拟异常,当出现异常后面的await就不会执行");
}
try {
//设置barrier,等待被唤醒
barrier.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
//barrier.await() 之后线程继续执行
System.out.println(Thread.currentThread().getName() + " 会议发言...");
}
public static void main( String[] args ) {
ThreadOfCyclicBarrier tcb = new ThreadOfCyclicBarrier();
//创建一个新的 CyclicBarrier ,当给定数量的线程(线程)正在等待时,它将跳闸,当屏障跳闸时执行给定的屏障动作,由最后一个进入屏障的线程执行。
CyclicBarrier barrier = new CyclicBarrier(10, () -> System.out.println(Thread.currentThread().getName() + "不好意思,我是最后一个到的,我们开始开会吧..."));
for (int i = 0; i < 11; i++) {
//创建线程,并调用meeting方法将barrier传入方法中
new Thread(() -> tcb.meeting(barrier)).start();
}
}
}
本博客为Swagger-Ranger的笔记分享,文中源码地址: https://github.com/Swagger-Ranger
欢迎交流指正,如有侵权请联系作者确认删除: liufei32@outlook.com
标签:rri java 需要 cli git stat 调用 pac ring
原文地址:https://www.cnblogs.com/Swagger-Ranger/p/10669940.html