java高级----Thread之CyclicBarrier的使用

  CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。今天我们就学习一下CyclicBarrier的用法。

 

CyclicBarrier的简单使用

  类CyclicBarrier不仅有CountDownLatch所具有的功能,还可以实现屏障等待的功能,也就是阶段性同步,它在使用上的意义在于可以循环地实现线程要一起做任务的目标,而不是像类CountDownLatch一样,仅仅支持一次线程与同步点阻塞的特性。

关于CyclicBarrier常用的方法的介绍:

package com.linux.huhx.concurreny;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 CyclicBarrierTest1 {public static void main(String[] args) throws IOException, InterruptedException {/*** 1、如果参数>3的话,三个线程的await执行完,parties只能加到3。那么子线程await后续的方法就不能执行* 2、如果参数=3的话,三个线程的await执行完,parties能加到3。所以子线程await后续的方法能执行* 3、如果参数<3的话,当第二个线程await执行完之后,parties加到了2。??????*/CyclicBarrier barrier = new CyclicBarrier(3);ExecutorService executor = Executors.newFixedThreadPool(3);executor.submit(new Thread(new Runner(barrier, "1号选手")));executor.submit(new Thread(new Runner(barrier, "2号选手")));executor.submit(new Thread(new Runner(barrier, "3号选手")));Thread.sleep(200);System.out.println("in main method after");executor.shutdown();}public static 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;}@Overridepublic void run() {try {Thread.sleep(new Random().nextInt(1000));System.out.println(name + " 准备好了...");// barrier的await方法,在所有参与者都已经在此 barrier 上调用 await 方法之前,将一直等待。
                barrier.await();} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}System.out.println(name + " 起跑!");}}
}

运行的结果如下:执行的结果不固定

in main method after
2号选手 准备好了...
1号选手 准备好了...
3号选手 准备好了...
2号选手 起跑!
1号选手 起跑!
3号选手 起跑!

 

友情链接

  • 比较好的参考博客:http://blog.csdn.net/shihuacai/article/details/8856407

 

转载于:https://www.cnblogs.com/huhx/p/baseusejavaCyclicBarrier.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

异常处理,究竟是处理什么

“系统中每行代码&#xff0c;都应该是有意义的&#xff0c;如果一段代码可有可无&#xff0c;那它就不应该存在。”01—内容简述异常处理是软件开发的必备技能&#xff0c;但“异常处理&#xff0c;究竟是处理什么&#xff1f;”&#xff0c;很多小伙伴并没有一个清晰的认识&a…

第十一篇:(顺序)容器的好伴侣 --- 容器适配器

前言 vector容器的数据结构原型是顺序表&#xff0c;它很好的实现了顺序表的功能&#xff0c;大大方便了编程。好了&#xff0c;现在假设有天我又想用栈&#xff0c;那么有没有栈对应的容器呢&#xff1f;很遗憾&#xff0c;木有。但基于“栈”可以由顺序表或者链表实现这一特性…

第一季度ADC市场份额揭榜 A10 Networks再获用户青睐

近日&#xff0c;根据全球知名咨询公司IDC 发布的2018年第一季度中国ADC市场分析报告显示&#xff0c;A10 Networks 稳占中国ADC市场份额第二名。数据来源&#xff1a;IDC 2018年Q1 ADC市场报告 从厂商排名来看依次为 F5 30%, A10Networks 12%, DPtech 12% ,Sangfor 9% &#…

zblog php 标题优化,Zblog分类页标题重复的优化 - 张力博客

今天疯子无聊上自己博客看看&#xff0c;点了几个页面就发现一个问题。我博客分类页的标题怎么第一页和后面的页数都是一样的&#xff0c;这一点相信大家都知道对于SEO优化是很不好的一点。我也看了同样的一些个人zblog博客也存在这样的问题。于是我在网上就找了关于修改zblog分…

利用linux shell自己主动顶贴

在论坛上面发帖问个什么东西的话&#xff0c;一旦不顶。帖子就秒沉了&#xff0c;可是又实在不想每时每刻都去顶&#xff0c;怎么办&#xff1f;以下展示了怎样利用shell 的crontab实现自己主动顶贴。 闲话不多说了&#xff0c;以豆瓣为例—– 1&#xff1a; 用chrome打开豆瓣…

Linux命令之telnet 命令

介绍 Telnet是常用的远程控制Web服务器的方法 Telnet协议是TCP/IP协议族中的一员&#xff0c;是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序&#xff0c;用它连接到服务器。终端使用者…

深度学习库 SynapseML for .NET 发布0.1 版本

2021年11月 微软开源一款简单的、多语言的、大规模并行的机器学习库 SynapseML&#xff08;以前称为 MMLSpark&#xff09;&#xff0c;以帮助开发人员简化机器学习管道的创建。具体参见[1]微软深度学习库 SynapseML&#xff1a;可直接在系统中嵌入 45 种不同机器学习服务、支持…

Buildroot stress-ng Linux系统压力测试

/*********************************************************************** Buildroot stress-ng Linux系统压力测试* 说明&#xff1a;* 之前有使用lmbench对整板进行一些测试&#xff0c;如果相对某一部分专门进行测试&#xff0c;* 就可以参考使用stree-ng…

支持回调处理 php函数,PHP支持回调的函数有哪些?

PHP支持回调的函数有&#xff1a;1、匿名函数&#xff0c;代码为【$server->on Request】&#xff1b;2、类静态方法&#xff0c;代码为【static function test $req】&#xff1b;3、函数&#xff0c;代码为【my_onRequest $req】。PHP支持回调的函数有&#xff1a;1、匿名…

病毒木马查杀实战第019篇:病毒特征码查杀之编程实现

前言上次我们已经简介过了病毒特征码提取的基本方法&#xff0c;那么这次我们就通过编程来实现对于病毒的特征码查杀。定义特征码存储结构为了简单起见。这次我们使用的是setup.exe以及unpacked.exe这两个病毒样本。经过上次的分析&#xff0c;我们对setup.exe样本的特征码提取…

《ASP.NET Core 6框架揭秘》实例演示[22]:如何承载你的后台服务[补充]

借助 .NET提供的服务承载&#xff08;Hosting&#xff09;系统&#xff0c;我们可以将一个或者多个长时间运行的后台服务寄宿或者承载我们创建的应用中。任何需要在后台长时间运行的操作都可以定义成标准化的服务并利用该系统来承载&#xff0c;ASP.NET Core应用最终也体现为这…

命令行打印文件树列表: tree

Linux & Mac 1.下载tree lib //mac brew install tree //centos yum install tree //ubuntu apt-get install tree 用法 //显示所有文件 tree //显示深度2层 tree -L 2 2. 命令find组合 find . -print | sed -e s;[^/]*/;|____;g;s;____|; |;g > structure.txt 移除node…

java 二分法查找数组,Java二分法查找数组元素下标

package pers.ly.javase.algorithm;import java.util.Arrays;/*** 二分法查找* author: Lu Yang* date: 2019-01-23 10:50:37**/public class BinarySearch {public static void main(String[] args) {Integer[] arr {10,50,30,40,10,80,90,70,60,40,100,10};// 数组排序 ->…

ASP.NET Core MVC压缩样式、脚本及总是复制文件到输出目录

前言 在.NET Core之前对于压缩样式文件和脚本我们可能需要借助第三方工具来进行压缩&#xff0c;但在ASP.NET MVC Core中则无需借助第三方工具来完成&#xff0c;本节我们来看看ASP.NET Core MVC为我们提供了哪些方便。 自动压缩样式和脚本 当我们在测试环境中肯定不需要压缩脚…

京东订单自动评价方法

刚刚完成的一个京东自动订单脚本, 以后还要加入其它京东自动的脚本项目地址: https://github.com/mm333444/aox_jd_auto_script 京东自动完成脚本 目前只完成京东订单自动评价, 评价时会自动上传商品图片 一、安装 1. 程序依赖 python3.52. 安装配置 安装pipenv安装模块 pipenv…

matlab空间散点拟合曲线,matlab离散点拟合曲线

matlab曲线拟合与数值点标注实例_工程科技_专业资料。实例 1: 现已知两组...Matlab教程 曲线拟合工具箱 数学科学与技术学院 胡金燕 lionfr 曲线拟合定义 在实际工程应用和科学实践中,经常需要寻求 两个(或多个)变量间的关系,而......(p,x); %获得x点处对相应的y值 plot(x,y,r*…

redis下并发问题解决方案

http://effective.blog.51cto.com/8296150/1671743 现在的计算机大都是多核的cpu,意味着可以并行执行多个进程.如果这多个运行的进程对同一份数据进行读写操作,那么就有可能出现两个或者多个进程读到的都是老的数据,这种情况下,再进行写入操作之后就会有一些进程写入的数据被覆…

宜建立自主可控的车用芯片和操作系统技术体系

万物互联时代&#xff0c;操作系统的边界在不断突破&#xff0c;面向“人机物”融合的泛在计算场景&#xff0c;能够支撑分布式人机物协同应用的操作系统将是产业未来之光。操作系统在经过主机时代、PC互联时代、移动互联时代之后&#xff0c;来到万物互联时代&#xff0c;这恰…

Java 9进入第一轮问题修复阶段

Java 9功能特性正式完成&#xff0c;这意味着第一个问题修复阶段已经开始。HTTP/2客户端没有在截止日期前完成&#xff0c;现已降级为孵化器功能。由于现在的目标是在7月准备好可发布的Java 9&#xff0c;所以目前不太可能添加任何新的JEP。\\InfoQ此前的报道中提到&#xff0c…

django 用户管理(1)

编辑了前端的页面展示&#xff0c;用的bootstrap 用户登录 用户信息 用户编辑 创建用户 修改密码 转载于:https://blog.51cto.com/jacksoner/2133129