CountdownLatch 类分析
来源:互联网 发布:朴宰范 私生活问题知乎 编辑:程序博客网 时间:2024/06/01 11:32
之前看过一个视频,讲的主要是如何通过多线程模拟高并发访问。当时还没接触CountdownLatch这个类,之前有了解过进程间的通信方式,例如信号量、消息队列等。这篇文章主要研究 CountdownLatch 这个类的基本用法,以及如何实现多个线程同时运行。
CountdownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,他允许一个或多个线程一直等待。
主要方法
public CountDownLatch(int count);public void countDown();public void await() throws InterruptException
CountDownLatch构造方法中的 count 参数指定了技术的次数。
countDown()方法,当前线程调用此方法,则计数减一
await() 方法,调用此方法会一直阻塞当前线程,知道计时器的值为0
package countdownlatch;import java.util.concurrent.CountDownLatch;public class demo1 {private static void runDAfterABC() {int worker = 3;CountDownLatch countDownLatch = new CountDownLatch(worker);new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println("D is waiting for other three threads");try {countDownLatch.await();System.out.println("All done, D starts working");} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}).start();for (char threadName = 'A'; threadName <= 'C'; threadName++) {final String tN = String.valueOf(threadName);new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubSystem.out.println(tN+" is working");try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(tN+" finished");countDownLatch.countDown();}}).start();}}public static void main(String[] args) {runDAfterABC();}}
执行结果
D is waiting for other three threadsA is workingB is workingC is workingA finishedC finishedB finishedAll done, D starts working
执行过程:
- 首先,创建一个计数器,设置 count 的初始值,程序中的数值设置为3;
- 在执行了线程 D 之后,调用 countDownLatch.await()方法,将会进入阻塞状态,知道 countDownLatch 的 count 参数值为0;
- 在其他线程里,调用 countDownLatch.countDown() 方法,调用该方法会将计数值 减 1;
- 当其他线程中的 countDown() 方法把计数值变成 0 时,等待线程里的 countDownLatch.await() 立即退出,执行下面的代码
阅读全文
0 0
- CountdownLatch 类分析
- CountDownLatch分析
- 分析countdownlatch
- 《Java源码分析》:CountDownLatch
- JUC - CountDownLatch 源码分析
- 源码分析-CountDownLatch
- CountDownLatch 源码分析
- CountDownLatch源码分析
- 《Java源码分析》:CountDownLatch
- CountDownLatch源码分析
- 类 CountDownLatch
- JDK源码分析--多线程同步工具CountDownLatch类
- Java源码分析之CountDownLatch
- Java 并发 --- CountDownLatch源码分析
- CountDownLatch同步辅助类
- CountDownLatch同步工具类
- 浅谈CountDownLatch类
- 同步类CountDownLatch
- hdu 2807 矩阵相乘+弗洛伊德
- C++将整数字符串转化为整数值
- 微信支付Java开发快速入门&工具类
- 单继承和菱形继承
- 单片机/树莓派扩展双串口(TTL和RS485)
- CountdownLatch 类分析
- Linux系统用户管理
- 2017国庆后有感
- Android 6.0 运行时权限管理最佳实践
- opencv2+ glob循环读入图片,将文件夹中的图片统一格式
- redis在java中的使用
- cocos2dx3.5 中listview item里面有ControlButton滑动失效的问题
- sql2000无法打开1433端口及解决方法
- SpringMVC学习笔记----