2019独角兽企业重金招聘Python工程师标准>>>

1. CountDownLatch简介

       一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。其本质就是一个共享锁。

他最主要的作用是用来同步java的线程。

主要有以下三个方法:

主要方法:

 public CountDownLatch(int count);public void countDown();public void await();

构造方法参数指定了计数的次数

countDown方法,当前线程调用此方法,则计数减一

await方法,调用此方法会一直阻塞当前线程,直到计时器的值为0

2. 实战应用的例子

一个模拟运动员比赛的例子,首先要等所有的运动员全部给准备好,然后发起“起跑指令”所有的运动员开始起跑,等所有的运动员跑完才结束本次笔试。

代码如下:

运动员线程代码:

package it_cast.day01;
import java.util.concurrent.CountDownLatch;
public class Player implements Runnable {private int id;private CountDownLatch begin;private CountDownLatch end;public Player(int id, CountDownLatch begin, CountDownLatch end) {this.id=id;this.begin=begin;this.end=end;}@Overridepublic void run() {// TODO Auto-generated method stubtry {System.out.println("Play" + id + "ready");begin.await();// 所有的运动员在这准备者,当一声令下就开始跑Thread.sleep((long) (Math.random() * 100));// 随机分配时间,即运动员完成时间System.out.println("Play" + id + " arrived.");} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {end.countDown();// 每个运动员跑完,使end状态减1,最终减至0}        }
}

主代码:

package it_cast.day01;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CountDownLatchDemo {private static final int PLAYER_AMOUNT = 5;public static void main(String[] args) throws InterruptedException {// TODO Auto-generated method stub//对于每位运动员,CountDownLatch减1后即结束比赛CountDownLatch begin = new CountDownLatch(1);//对于整个比赛,所有运动员结束后才算结束CountDownLatch end = new CountDownLatch(PLAYER_AMOUNT);Player [] plays=new Player[PLAYER_AMOUNT];//初始化5个运动员for (int i = 0; i < plays.length; i++) {plays[i]=new Player(i, begin, end);}//设置特定的线程池,大小为5ExecutorService exe = Executors.newFixedThreadPool(PLAYER_AMOUNT);for(Player p:plays)exe.execute(p); Thread.sleep(1000);System.out.println("Race begins!");begin.countDown();end.await();; //等待end状态变为0,即为所有人都跑完了,即为比赛结束System.out.println("Race ends!");exe.shutdown();     }
}

运行结果如下:

转载于:https://my.oschina.net/u/1540325/blog/603298

CountDownLatch应用实战相关推荐

  1. CountDownLatch、CyclicBarrier实战场景分析(附代码)

    目录 概述 CountDownLatch概述 CountDownLatch实战之前置任务处理 CountDownLatch实战之后置任务处理 CountDownLatch实战之最优接口逻辑 Cycli ...

  2. Java并发编程实战~CountDownLatch

    无线程池实现 while(存在未对账订单){// 查询未对账订单Thread T1 = new Thread(()->{pos = getPOrders();});T1.start();// 查 ...

  3. 【Java并发编程实战】 5.5.1章节 闭锁 CountDownLatch 实现

    文章目录 1. 什么是闭锁 2. 闭锁的应用场景 3. 闭锁的实现 4. CountDownLatch原理 5. 使用案例 5.1 入门案例 5.2 复杂案例 1. 什么是闭锁 闭锁(latch)是一 ...

  4. java 高并发第三阶段实战_JAVA多线程编程实战视频-第三阶段(共80节)

    高并发编程第三阶段01讲 AtomicInteger多线程下测试讲解 高并发编程第三阶段02讲 AtomicInteger API详解,以及CAS算法详细介绍 高并发编程第三阶段03讲 利用CAS构造 ...

  5. JUC 中的多线程协作工具类:CountDownLatch 和 CyclicBarrier

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:干掉 Navicat:这个 IDEA 的兄弟真香!个人原创100W+访问量博客:点击前往,查看更多 最近在学习 ...

  6. java并发实战编程pdf_「原创」Java并发编程系列25 | 交换器Exchanger

    2020年Java面试题库连载中 [000期]Java最全面试题库思维导图 [001期]JavaSE面试题(一):面向对象 [002期]JavaSE面试题(二):基本数据类型与访问修饰符 [003期] ...

  7. Java CountDownLatch的两种常用场景

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/120506758 本文出自[赵彦军的博客] 文章目录 简介 场景1 让多个线程等待: ...

  8. Java8 CountDownLatch 源码分析

    一.CountDownLatch 概述 1.1 什么是 CountDLatch 闭锁(CountDownLatch)是 java.util.concurrent 包下的一种同步工具类.闭锁可以用来确保 ...

  9. Java 并发编程系列之闭锁(CountDownLatch)

    在讲闭锁之前,我们先来思考一个问题:在多线程环境下,主线程打印一句话,如何保证这句话最后(其他线程全部执行完毕)打印? 博主目前可以想到的实现方式有两种.一种是通过 join() 方法实现,另一种就是 ...

最新文章

  1. “刚毕业1年,做Python能挣多少?”网友:吹的不多..
  2. 最细的实现剖析:jQuery 2.0.3源码分析Deferred
  3. phpMyAdmin登陆超时1440秒未活动请重新登录
  4. 不降的数字(51Nod-2499)
  5. visual studio 编译器在辨异 C/C++ 程序时的注意事项
  6. python重要性_基于Python的随机森林特征重要性图
  7. 【医疗影像处理】antspy数据读取与保存
  8. 关于Tortoise git汉化包装了,不管用,仍然是英文菜单的问题记录
  9. [Tyvj 模拟赛] 运
  10. 玩转流量,天下无锅——IT运维人员的九阳神功(上)
  11. C++:实现标准体重判定
  12. 用JBE修改Java字节码
  13. 嵌入式课程设计linux,嵌入式课程设计报告
  14. eos节点服务器_eos区块链php开发包
  15. 全新剪映专业版140内测版!等你体验!
  16. 【学习OpenCV4】OpenCV入门精讲(C++/Python双语教学)
  17. 【数据结构期末例题】
  18. 如何提高深度学习预测准确率
  19. 自动化测试 | Selenium自动化测试框架,实战遇到的坑都在这了,玩转自动化测试
  20. 全国地图省份联动效果

热门文章

  1. 山东青岛市南区:创建物联网 信息化管理涉案财物
  2. 禁止sethc.exe运行 防止3389的sethc后门
  3. C++实现静态顺序表的增删查改以及初始化
  4. 可穿戴设备对企业的积极意义
  5. JFinal 1.5 发布,JAVA极速WEB+ORM框架
  6. application/x-www-form-urlencoded 与multipart/form-data
  7. 硬盘分区与故障排解速查手册(1)
  8. 关于Elemet-ui组件Cascader中proper的配置问题
  9. Python档案袋( 面向对象 )
  10. 程序员必须知道的HTML常用代码有哪些?