java CyclicBarrier
2024-08-29 09:59:05
import java.io.IOException;
import java.util.Random;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; public class R { public static void main(String[] args) throws IOException, InterruptedException {
//如果将参数改为4,但是下面只加入了3个选手,这永远等待下去
//Waits until all parties have invoked await on this barrier.
CyclicBarrier barrier = new CyclicBarrier(); ExecutorService executor = Executors.newFixedThreadPool();
executor.submit(new Thread(new Runner(barrier, "1号选手")));
executor.submit(new Thread(new Runner(barrier, "2号选手")));
executor.submit(new Thread(new Runner(barrier, "3号选手"))); executor.shutdown();
}
} class Runner implements Runnable {
// 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)
private CyclicBarrier barrier; private String name; public Runner(CyclicBarrier barrier, String name) {
super();
this.barrier = barrier;
this.name = name;
} @Override
public void run() {
try {
Thread.sleep( * (new Random()).nextInt());
System.out.println(name + " 准备好了..."); //
// barrier的await方法,在所有参与者都已经在此 barrier 上调用 await 方法之前,将一直等待。
//barrier.await(); 关闭此处,所有线程各自执行会不影响 //让barrier中所有线程 做完 barrier.await()之前的任务,
//比如 "System.out.println(name + " 准备好了..."); " 然后才继续下面的任务
barrier.await(); } catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println(name + " 起跑!");
}
}
最新文章
- Android获取位置信息的方法总结
- java集合中的传值和传引用
- 页面超慢,zabbix却没报警
- Thinking in Java——笔记(5)
- 【译】 AWK教程指南 11递归程序
- nyoj 1237 最大岛屿(dfs)
- vertical-align属性详解
- 如何让vim像IDE一样一键放大缩小字号?
- Robot Framework学习笔记(九)------创建资源和用户关键字
- 一 期末架构1 centos7 简介
- IAR Embedded Workbench for ARM 8.22.1 基础使用教程
- git关联了无用的,取消关联,并重置gitignore
- Spring Boot配置文件详解
- 深入浅出Windows命令——telnet
- svn命令行创建和删除分支和tags
- TCC : Tiny C Compiler (2018-2-6)
- HDU4627
- Android 给app加入百度地图
- Linux VFS机制简析(一)
- 漫谈 Clustering (4): Spectral Clustering<;转载>;