CountdownLatchTest
import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /*** * @author Administrator*该程序用来模拟发送命令与执行命令,主线程代表指挥官,新建3个线程代表战士,战士一直等待着指挥官下达命令,*若指挥官没有下达命令,则战士们都必须等待。一旦命令下达,战士们都去执行自己的任务,指挥官处于等待状态,战士们任务执行完毕则报告给*指挥官,指挥官则结束等待。*/public class CountdownLatchTest {public static void main(String[] args) {ExecutorService service = Executors.newCachedThreadPool(); //创建一个线程池final CountDownLatch cdOrder = new CountDownLatch(1);//指挥官的命令,设置为1,指挥官一下达命令,则cutDown,变为0,战士们执行任务final CountDownLatch cdAnswer = new CountDownLatch(3);//因为有三个战士,所以初始值为3,每一个战士执行任务完毕则cutDown一次,当三个都执行完毕,变为0,则指挥官停止等待。 for(int i=0;i<3;i++){Runnable runnable = new Runnable(){public void run(){try {System.out.println("线程" + Thread.currentThread().getName() + "正准备接受命令"); cdOrder.await(); //战士们都处于等待命令状态System.out.println("线程" + Thread.currentThread().getName() + "已接受命令"); Thread.sleep((long)(Math.random()*10000)); System.out.println("线程" + Thread.currentThread().getName() + "回应命令处理结果"); cdAnswer.countDown(); //任务执行完毕,返回给指挥官,cdAnswer减1。 } catch (Exception e) {e.printStackTrace();} }};service.execute(runnable);//为线程池添加任务 } try {Thread.sleep((long)(Math.random()*10000));System.out.println("线程" + Thread.currentThread().getName() + "即将发布命令"); cdOrder.countDown(); //发送命令,cdOrder减1,处于等待的战士们停止等待转去执行任务。System.out.println("线程" + Thread.currentThread().getName() + "已发送命令,正在等待结果"); cdAnswer.await(); //命令发送后指挥官处于等待状态,一旦cdAnswer为0时停止等待继续往下执行System.out.println("线程" + Thread.currentThread().getName() + "已收到所有响应结果"); } catch (Exception e) {e.printStackTrace();} service.shutdown(); //任务结束,停止线程池的所有线程 }}
CountdownLatchTest相关推荐
- java并发之同步辅助类CyclicBarrier和CountDownLatch
CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier).它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门, ...
- JAVA中的并发工具 -- CountDownLatch、CyclicBarrier、Semaphore
2019独角兽企业重金招聘Python工程师标准>>> CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作. CountDownLatc ...
- 没听说过这些,就不要说你懂并发了,three。
引言 很久没有跟大家再聊聊并发了,今天LZ闲来无事,跟大家再聊聊并发.由于时间过去的有点久,因此LZ就不按照常理出牌了,只是把自己的理解记录在此,如果各位猿友觉得有所收获,就点个推荐或者留言激励下LZ ...
- Java的CountDownLatch和CyclicBarrier的理解和区别
CountDownLatch和CyclicBarrier的功能看起来很相似,不易区分,有一种谜之的神秘.本文将通过通俗的例子并结合代码讲解两者的使用方法和区别. CountDownLatch和Cycl ...
- Java并发包之闭锁/栅栏/信号量(转)
本文转自http://blog.csdn.net/u010942020/article/details/79352560 感谢作者 一.Java多线程总结: 描述线程的类:Runable和Thread ...
- CyclicBarrier和CountDownLatch区别
这两天写多线程时,用到了CyclicBarrier,下意识的认为CyclicBarrier和CountDownLatch作用很像,就翻阅资料查了一下,说一下他们的区别吧 CyclicBarrier和C ...
- 死磕Java并发:J.U.C之并发工具类:CountDownLatch
作者:chenssy 来源:Java技术驿站 在上篇博客中介绍了Java四大并发工具一直的CyclicBarrier,今天要介绍的CountDownLatch与CyclicBarrier有点儿相似. ...
- java中等待所有线程都执行结束
使用CountDownLatch,这其实是最优雅的写法了,每个线程完成后都去将计数器减一,最后完成时再来唤醒 @Test public void testThreadSync3() { final V ...
- Java并发编程之线程同步
线程安全就是防止某个对象或者值在多个线程中被修改而导致的数据不一致问题,因此我们就需要通过同步机制保证在同一时刻只有一个线程能够访问到该对象或数据,修改数据完毕之后,再将最新数据同步到主存中,使得其他 ...
最新文章
- Confluence 6 开始使用
- 网站托管的内容细节你都清楚吗?
- 虚幻4 控制台_鹅厂新手机游戏开测,虚幻4引擎开发战略游戏,能否超过率土之滨...
- 实现Callable接口通过FutureTask包装器来创建Thread线程
- 学习笔记(20):Python网络编程并发编程-互斥锁与join的区别
- javafx 图标_JavaFX技巧32:需要图标吗? 使用Ikonli!
- Spoken English-口语-单词背诵 3步法
- 【小梅哥SOPC学习笔记】系统时钟的使用
- numpy中矩阵的转置_NumPy矩阵transpose()-Python中数组的转置
- 欧拉定理、费马小定理及其拓展应用
- 大气层整合傻瓜包_【工具】switch大气层9.2系统升级固件+大气层0.10.3离线整合包...
- SRAM、PSRAM、SPI FLASH初步认识
- 《微机原理第五版》期末知识总结(第五章---第七章)
- linux vim粘贴和复制文件,【linux】vim怎么粘贴其他地方复制的代码?
- 世界著名电影特效公司
- 浮云人脸搜索软件最新版本上线,宣告人脸搜索又进一步
- BTT、BZZ、IPFS都是分布式存储到底有何区别?一文读懂
- 全国大学生网络安全精英赛复赛笔记
- 【Kafka】kafka命令 kafka-console-producer
- 风林火山游戏运营综合测试题2
热门文章
- Mysql多表关联查询
- mysql binary-mode=1_Mysql 性能调优 二 1
- python中for循环流程图_Javascript for循环_郭隆邦技术博客
- python dict批量选择_用python实现word内容批量替换
- 计算机辅导资料,计算机基础辅导资料.doc
- mac 本地安装mysql_mac 本地安装mysql服务
- 500g linux怎么分区吗,500G的硬盘,怎么分区比较合理?
- java字符编码详解_Java中字符编码格式详解
- dell 虚拟linux,戴尔:Linux是轻松构建虚拟主机的关键
- oracle xtts 测试,XTTS 跨平台表空间迁移测试