Java 同步器

 

 

 

 

 

 

 

 

 

 

CyclicBarrier是什么

CyclicBarrier也叫同步屏障,在JDK1.5被引入,可以让一组线程达到一个屏障时被阻塞,直到最后一个线程达到屏障时,所以被阻塞的线程才能继续执行。
CyclicBarrier好比一扇门,默认情况下关闭状态,堵住了线程执行的道路,直到所有线程都就位,门才打开,让所有线程一起通过。

构造方法

  1. 默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用await方法告诉CyclicBarrier已经到达屏障位置,线程被阻塞。
  2. 另外一个构造方法CyclicBarrier(int parties, Runnable barrierAction),其中barrierAction任务会在所有线程到达屏障后执行。

CyclicBarrier.png

应用场景

想象一个场景,运动会男子100米决赛,8名选手。

Athlete.java :每个运动员都就位后才开始。

class Athlete implements Runnable {private CyclicBarrier cyclicBarrier;private String name;public Athlete(CyclicBarrier cyclicBarrier, String name) {this.cyclicBarrier = cyclicBarrier;this.name = name;}@Overridepublic void run() {System.out.println(name + "就位");try {cyclicBarrier.await();Random random =new Random();double time = random.nextDouble() + 9;System.out.println(name + ": "+ time);} catch (Exception e) {}}
}

Race.java : 负责屏障的初始化。

class Race {private CyclicBarrier cyclicBarrier = new CyclicBarrier(8);public void start() {List<Athlete> athleteList = new ArrayList<>();athleteList.add(new Athlete(cyclicBarrier,"博尔特"));athleteList.add(new Athlete(cyclicBarrier,"鲍威尔"));athleteList.add(new Athlete(cyclicBarrier,"盖伊"));athleteList.add(new Athlete(cyclicBarrier,"布雷克"));athleteList.add(new Athlete(cyclicBarrier,"加特林"));athleteList.add(new Athlete(cyclicBarrier,"苏炳添"));athleteList.add(new Athlete(cyclicBarrier,"路人甲"));athleteList.add(new Athlete(cyclicBarrier,"路人乙"));Executor executor = Executors.newFixedThreadPool(8);for (Athlete athlete : athleteList) {executor.execute(athlete);}}
}

 

 

转载于:https://www.cnblogs.com/diegodu/p/7339423.html

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

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

相关文章

SMB MS17-010 利用(CVE-2017-0144 )

exploit-db : https://www.exploit-db.com/exploits/42315/ 该漏洞的影响版本很广泛&#xff1a;Microsoft Windows Windows 7/8.1/2008 R2/2012 R2/2016 R2 - EternalBlue SMB Remote Code Execution (MS17-010) 具体请查看公告&#xff1a;Microsoft 安全公告 MS17-010 - 严重…

计算机硬盘的主流型号,四款主流2.5英寸笔记本机械硬盘性能对比

虽说固态硬盘已经逐渐成为了主流&#xff0c;但是对于普通的笔记本用户来说&#xff0c;传统的2.5英寸机械硬盘则是笔记本扩容的首选&#xff0c;毕竟现在一款1TB的笔记本机械硬盘价格不到400元&#xff0c;而1TB的固态硬盘无论是什么接口&#xff0c;价格都能买好几个机械硬盘…

研究人员用数据统计的方法来做文学研究

研究人员用数据统计的方法来做文学研究 大数据与文学&#xff0c;一个是理性工具&#xff0c;一个是感性思维&#xff0c;看起来似乎不沾边。但如今&#xff0c;二者的联系却日渐紧密起来&#xff0c;也由此引发了不少争议。 谁是最爱往外跑的诗人&#xff1f; 唐宋时期最爱往外…

阿里云 centos ssh key 客户端 无密码登录 ssh 登录

准备工作&#xff1a;刚购买了阿里云&#xff0c;使用登录账号密码&#xff0c;其次我的mac电脑已经生产了ssh-key啦。使用ssh-key登录阿里云只需要一步设置&#xff1a; ssh-copy-id -i ~/.ssh/id_rsa.pub root139.196.85.194 然后乖乖得输入服务器密码&#xff0c;按下回车。…

[bzoj1036]树的统计

链剖好难调啊~调了半个小时&#xff0c;终于发现线段树写挂了233 唉&#xff0c;我真是个假人~ Description 一棵树上有n个节点&#xff0c;编号分别为1到n&#xff0c;每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作&#xff1a; I. CHANGE u t : 把…

ajax 错误信息error,jquery ajax的error错误信息

项目开发中ajax的异常处理起来算是比较头疼的&#xff0c;因为是异步请求&#xff0c;所以即使ajax异常程序依然会继续执行&#xff0c;导致找ajax的异常比较麻烦。今天处理ajax异常时搜到一篇文章&#xff0c;提到error可以返回ajax异常信息。$.ajax({url: url,type: "po…

变频器服务器电路板维修,变频器电路板维修技巧

变频器电路板维修技巧电路板使电路迷你化、直观化&#xff0c;对于固定电路的批量生产和优化用电器布局起重要作用。下面来跟西欧阿布了解下变频器电路板的维修技巧吧。前市场上国产变频器主要以低压通用型变频器为主&#xff0c;为下文叙述方便&#xff0c;现简要介绍通用型变…

struts基础配置

struts2是针对MVC思想的具体实现&#xff0c;对应于MVC中的C即Controller控制器层&#xff0c;有以下优点&#xff1a; 通过简单、集中的配置来调度业务类&#xff0c;是的配置和修改都很容易。提供简单、统一的表达式语言来访问所有可访问的数据。提供标准、强大的验证框架和国…