IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 并发编程(七)--CountDownLatch -> 正文阅读

[开发测试]并发编程(七)--CountDownLatch

CountDownLatch是什么

CounDownLatch这个类能够使一个线程等待其它线程完成各自的工作后再执行,例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行。
使用场景:Zookeeper分布式锁,jmeter模拟高并发等。

CountDownLatch如何工作

CountDownLatch是通过一个计数器来实现的,计数器初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的初始值为线程的数量,每当一个线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务

API

countDownLatch.countDown();//计数器减一
countDownLatch.await();//等待计数器为0

countDownLatch应用场景例子

比如有两个线程,线程A执行需要3秒,线程B执行完需要5秒。现在我们是双核,可以同时执行这两个线程,5秒钟就能执行完成,然后一起回到主线程。

public class Thread_A implements Runnable{
    CountDownLatch countDownLatch;
   Logger logger=  LoggerFactory.getLogger(this.getClass());
    public Thread_A(CountDownLatch countDownLatch) {
        this.countDownLatch = countDownLatch;
    }

    @SneakyThrows
    @Override
    public void run() {
        logger.info("执行线程A:"+Thread.currentThread().toString());
        Thread.sleep(3000);
        logger.info("执行线程A完成,准备执行主线程");
        if(countDownLatch!=null){
            countDownLatch.countDown();
        }
    }
}
public class Thread_B implements Runnable{
    CountDownLatch countDownLatch;
    Logger logger=  LoggerFactory.getLogger(this.getClass());
    public Thread_B(CountDownLatch countDownLatch) {
        this.countDownLatch = countDownLatch;
    }

    @SneakyThrows
    @Override
    public void run() {
        logger.info("执行线程B:"+Thread.currentThread().toString());
        Thread.sleep(5000);
        logger.info("执行线程B完成,准备执行主线程");
        if(countDownLatch!=null){
            countDownLatch.countDown();
        }
    }
}
public class Test {

   public static void  main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch=new CountDownLatch(2);
        new Thread(new Thread_A(countDownLatch)).start();
        new Thread(new Thread_B(countDownLatch)).start();
        countDownLatch.await();
       System.out.println("执行主线程");
    }
}

输出:

16:01:15.233 [Thread-1] INFO com.zhongger.zchat.Thread_B - 执行线程B:Thread[Thread-1,5,main]
16:01:15.233 [Thread-0] INFO com.zhongger.zchat.Thread_A - 执行线程A:Thread[Thread-0,5,main]
16:01:18.249 [Thread-0] INFO com.zhongger.zchat.Thread_A - 执行线程A完成,准备执行主线程
16:01:20.238 [Thread-1] INFO com.zhongger.zchat.Thread_B - 执行线程B完成,准备执行主线程
执行主线程
  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-11-14 22:01:22  更:2021-11-14 22:02:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 2:35:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码