think in java笔记: java.util.concurrent.CyclicBarrier
来源:互联网 发布:iphone6透明屏幕软件 编辑:程序博客网 时间:2024/05/14 00:28
示例程序:
import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;class Horse implements Runnable { private static int counter = 0; private final int id = counter++; private int strides = 0; private static Random rand = new Random(47); private static CyclicBarrier barrier; public Horse(CyclicBarrier b) { this.barrier = b; } public synchronized int getStrides() { return strides; } public void run() { try { //这里使用循环,horse一直跑 while(!Thread.interrupted()) { synchronized(this) { strides += rand.nextInt(3); //Produce 0, 1 and 2 } barrier.await(); } } catch(InterruptedException | BrokenBarrierException e) { // A legitimate way to exit System.out.println(e); } } public String toString() { return "Horse " + id + " "; } public String tracks() { StringBuilder s = new StringBuilder(); for(int i = 0; i < getStrides(); i++) s.append("*"); s.append(id); return s.toString(); }}/** * Using CyclicBarriers * @author sut * @version $Revision:$ */public class HorseRace { static final int FINISH_LINE = 75; private List<Horse> horses = new ArrayList<Horse>(); private ExecutorService exec = Executors.newCachedThreadPool(); private CyclicBarrier barrier; public HorseRace(int nHorses, final int pause) { //new Runnable()每次到达await()完毕之后,就执行 barrier = new CyclicBarrier(nHorses, new Runnable(){ public void run() { StringBuilder s = new StringBuilder(); for(int i = 0; i < FINISH_LINE; i++) s.append("="); // The fence on the racetrack System.out.println(s); for(Horse horse : horses) System.out.println(horse.tracks()); for(Horse horse : horses) if(horse.getStrides() >= FINISH_LINE) { System.out.println(horse + "won!"); exec.shutdownNow(); return; } try { //睡眠时间 TimeUnit.MILLISECONDS.sleep(pause); } catch(InterruptedException e) { System.out.println("barrier-action sleep interrupted"); } } }); for(int i = 0; i < nHorses; i++){ Horse horse = new Horse(barrier); horses.add(horse); exec.execute(horse); } } public static void main(String[] args) { int nHorses = 7; int pause = 200; if(args.length > 0){ //optional argument int n = new Integer(args[0]); nHorses = n > 0 ? n : nHorses; } if(args.length > 1){ int p = new Integer(args[1]); pause = p > -1 ? p : pause; } new HorseRace(nHorses, pause); }}
0 0
- think in java笔记: java.util.concurrent.CyclicBarrier
- think in java笔记:java.util.concurrent.Semaphore
- java.util.concurrent.CyclicBarrier
- java.util.concurrent.CyclicBarrier
- java.util.concurrent.CyclicBarrier
- java.util.concurrent.CyclicBarrier
- java.util.concurrent.CyclicBarrier
- java.util.concurrent之CyclicBarrier
- 初识java.util.concurrent.CyclicBarrier
- java.util.concurrent.CyclicBarrier 与 java.util.concurrent.CountDownLatch
- Java多线程工具包java.util.concurrent---CyclicBarrier
- java.util.concurrent包(6)-CyclicBarrier使用
- java.util.concurrent中:同步屏障CyclicBarrier
- 同步辅助类 java.util.concurrent.CyclicBarrier
- java.util.concurrent学习笔记
- java.util.concurrent包详解:CyclicBarrier和CountDownLatch
- java.util.concurrent 下的Semaphore CyclicBarrier CountDownLatch 分析使用
- java.util.concurrent.CyclicBarrier同步屏障工具类源码解析
- 监听器与过滤器的链式综合应用只解析图
- 链表常见面试问题
- 邓白氏编码申请
- 去掉数组中重复出现元素的算法
- plsql 查询blob数据和clob数据类型
- think in java笔记: java.util.concurrent.CyclicBarrier
- react学习笔记
- 自定义View
- 【解决】Junit单元测试中出现的报错
- Android开发-ImageViewDemo-AndroidStudio
- 将自己的应用程序编译进Android操作系统作为系统应用启动
- 目录处理命令
- iOS中使用NSProgress类来创建UI进度条的方法详解
- 二进制、八进制、十进制和十六进制之间的转换