java 栅栏_Java 并发工具类(栅栏 CyclicBarrier )
CyclicBarrier适用于这样的情况:你希望创建一组任务,它们并行地执行工作,然后在下一个步骤之前等待,直到所有任务都完成。栅栏和闭锁的关键区别在于,所有线程必须同时到达栅栏位置,才能继续执行。
闭锁用于等待事件,而栅栏是线程之间彼此等待,等到都到的时候再决定做下一件事。
拿运动员的事情举例,运动员们跑到终点,互相等待所有人都到达终点后,再一起去做喝酒这件事。(运动员也许不能喝酒的,也许大家再跑一轮。)
下面用一个赛马程序来举例:
```java
package concurrency;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.*;
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) {barrier = b;}
public synchronized int getStrides() {return strides;}
public void run() {
try {
while (!Thread.interrupted()) { //线程内不断循环
synchronized (this) {
strides += rand.nextInt(3); //每次马可以走0,1或者2步
}
barrier.await(); //走完后,就等所有其它马也走完,才能开始下一回合
}
} catch (InterruptedException e) {
} catch (BrokenBarrierException e) {
throw new RuntimeException(e);
}
}
@Override
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();
}
}
java 栅栏_Java 并发工具类(栅栏 CyclicBarrier )相关推荐
- java闭锁_Java并发工具类(闭锁CountDownLatch)
闭锁是一种同步工具类,可以延迟线程的进度直到其到达终止状态. CountDownLatch是一种灵活的闭锁实现,它可以使一个或者多个线程等待一组事件的发生. 闭锁状态包含一个计数器,该计数器被初始化为 ...
- 《Java并发编程的艺术》——Java中的并发工具类、线程池、Execute框架(笔记)
文章目录 八.Java中的并发工具类 8.1 等待多线程完成的CountDownLatch 8.2 同步屏障CyclicBarrier 8.2.1 CyclicBarrier简介 8.2.2 Cycl ...
- 《Java并发编程的艺术》读后笔记-Java中的并发工具类(第八章)
文章目录 <Java并发编程的艺术>读后笔记-Java中的并发工具类(第八章) 1.等待多线程完成的CountDownLatch 2.同步屏障CyclicBarrier 2.1 Cycli ...
- 【搞定Java并发编程】第24篇:Java中的并发工具类之CountDownLatch
上一篇:Java中的阻塞队列 BlockingQueue 详解 本文目录: 1.CountDownLatch的基本概述 2.CountDownLatch的使用案例 3.CountDownLatch的源 ...
- Java 中的并发工具类
From: https://blog.wuwii.com/juc-utils.html java.util.concurrent 下提供了一些辅助类来帮助我们在并发编程的设计. 学习了 AQS 后再了 ...
- 《Java并发编程的艺术》读书笔记 - 第八章 - Java中的并发工具类
目录 前言 等待多线程完成的 CountDownLatch 示例 同步屏障 CyclicBarrier 示例 CyclicBarrier 和 CountDownLatch 的区别 控制并发线程数量的 ...
- 死磕Java并发:J.U.C之并发工具类:CyclicBarrier
作者:chenssy 来源:Java技术栈公众号 CyclicBarrier,一个同步辅助类,在API中是这么介绍的: 它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier ...
- JAVA线程并发数量控制_Java并发工具类(三):控制并发线程数的Semaphore
作用 Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源. 简介 Semaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数 ...
- 用java实现combin函数_Java并发工具类CompletableFuture教程与示例
Java 8带来了大量的新功能和增强功能,例如Lambda表达式,Streams,CompletableFutures等.在本文中,我将通过简单的示例向您详细说明CompletableFuture及其 ...
最新文章
- Good Bye 2014 B. New Year Permutation(floyd )
- MVC4做网站后台:模块管理1、修改模块信息
- python协程实时输出_python协程
- python中的引用类型_Python 中的引用和类属性的初步理解
- java之Arrays工具类的使用
- 常用的排序算法的时间复杂度和空间复杂度 .
- 苹果6屏幕多大_苹果12使用高通X55,10亿买下的英特尔基带何时能派上用场
- myeclipse连接mysql怎么调用_myeclipse连接mysql数据库详细步骤
- Ubuntu下apt-get命令详解(转)
- 监听屏幕解锁和判断屏幕状态
- 2022最新软件设计师历年真题和答案解析分享!
- sql语句之多表查询
- 中国生态城市规划行业“十四五”规划与前景规模预测报告2022-2028年版
- 4W家庭理财 V2.0
- 基于CNN的区域特定多尺度特征提取的两阶段停车位检测
- 【好奇心驱动力】APP每日打卡自动化测试
- BUCTOJ邀请赛20180814-D: String
- 如何学习大型项目的源码?
- 使用python抓取并分析数据—链家网(requests+BeautifulSoup)(转)
- 47个经典java程序编程题
热门文章
- Python3学习(33)--序列和反序列化(二)
- 欠压继电器与过电压继电器
- uniapp公共测试证书签名
- cmake rpath Makefile rapth
- 高中数学知识点:集合知识讲解
- uafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 already defined in main.obj
- 1183: 平面点排序(一)(结构体专题)C语言
- LeetCode题解系列--309. Best Time to Buy and Sell Stock with Cooldown
- Centos初学者需要会的几种命令(2)
- 科罗拉多州奥罗拉市用基于磁盘的ExaGrid系统取代磁带备份