java线程系列---同步器之CountDownLatch
来源:互联网 发布:数据库防护方案 编辑:程序博客网 时间:2024/06/01 07:40
CountDownLatch 是一个极其简单但又极其常用的实用工具,用于在保持给定数目的信号、事件或条件前阻塞执行,通过调用await(),countDown()方法,实现同步功能。
例子:有三个线程,等待主线程下发命令,当主线程下发命令时,三个线程会接收命令,并执行,主线程接收执行完的结果
public class CountdownLatchTest {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
final CountDownLatch cdOrder = new CountDownLatch(1);
final CountDownLatch cdAnswer = new CountDownLatch(3);
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();
} catch (Exception e) {
e.printStackTrace();
}
}
};
service.execute(runnable);
}
try {
Thread.sleep((long)(Math.random()*10000));
System.out.println("线程" + Thread.currentThread().getName() +
"即将发布命令");
cdOrder.countDown();
System.out.println("线程" + Thread.currentThread().getName() +
"已发送命令,正在等待结果");
cdAnswer.await();
System.out.println("线程" + Thread.currentThread().getName() +
"已收到所有响应结果");
} catch (Exception e) {
e.printStackTrace();
}
service.shutdown();
}
}
- java线程系列---同步器之CountDownLatch
- java同步器之CountDownLatch
- java线程系列---同步器之Exchanger
- JAVA 同步器CountDownLatch CyclicBarrier
- Java并发同步器--CountDownLatch
- Java并发-同步器Semaphore,CountDownLatch
- Java线程之CountDownLatch
- java线程之CountDownLatch
- java线程同步之CountDownLatch
- java同步器之F4
- java同步器之CyclicBarrier
- CountDownLatch(同步器)
- java多线程编程——同步器CountDownLatch(三)
- java并发编程之同步器
- java并发编程之同步器
- java 并发编程之同步器
- java并发编程之同步器
- Java多线程编程之同步器
- SCVMM 基本管理
- Openfire源码分析
- Java多线程编程--(1)初识线程
- 《『若水新闻』客户端开发教程》——08.设计新闻回复UI
- 制作一个BCG单文档模拟的对话框
- java线程系列---同步器之CountDownLatch
- C#字符串的各种操作
- 购物车功能分析
- C语言--字符串长度的计算方法
- java基础--多线程
- POJ1191-裸动态规划
- vim学习资料整理
- jni中使用libcurl做网络开发
- 阻止一进入Activity就显示的输入法