原理:

CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞。
其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞),
当计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行。

import java.util.concurrent.CountDownLatch;

/**
*
* @Description:
* *让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒。
*
* CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞。
* 其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞),
* 当计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行。
*
* 解释:6个同学陆续离开教室后值班同学才可以关门。
*
* main主线程必须要等前面6个线程完成全部工作后,自己才能开干
*/
public class CountDownLatchDemo
{
public static void main(String[] args) throws InterruptedException
{
CountDownLatch countDownLatch = new CountDownLatch(6); for (int i = 1; i <=6; i++) //6个上自习的同学,各自离开教室的时间不一致
{
new Thread(() -> {
System.out.println(Thread.currentThread().getName()+"\t 号同学离开教室");
countDownLatch.countDown();
}, String.valueOf(i)).start();
}
countDownLatch.await();
System.out.println(Thread.currentThread().getName()+"\t****** 班长关门走人,main线程是班长"); } }

最新文章

  1. Div内有ul li元素,Div设置高度100%,谷歌IE下li过多会显示滚动条,而火狐下就会滚动条就不起作用,li会撑大Div
  2. php上传文件进度条
  3. git command
  4. Java数据类型(一)
  5. PPI是什么?如何计算?
  6. sql server判断表是否存在
  7. 【前端】windows64位必备软件清单
  8. PHP7变量的内部实现
  9. Linux维护之nginx宕机,端口被占用
  10. 一次Spring Bean初始化顺序问题排查记录
  11. 设计 mysql的单例模式及完整功能
  12. java生成二维码工具类
  13. February 12th, 2018 Week 7th Monday
  14. C#-MVC开发微信应用(5)--自动应答系统-自动回复机器人
  15. Excel导出到浏览器(个人备份)
  16. poj2778 DNA Sequence【AC自动机】【矩阵快速幂】
  17. .NET:鲜为人知的 “Load Context”
  18. Android储存
  19. ubuntu:NVIDIA设置性能模式,以降低CPU使用、温度
  20. node的express中间件之static之ajax提交json

热门文章

  1. 两个看似相同,结果不同的SQL逻辑
  2. TensorFlow系列专题(十三): CNN最全原理剖析(续)
  3. CSS 常用属性之 阴影
  4. Python python 五种数据类型--元组
  5. 6.Maven构建过程的各个环节
  6. pip安装超时问题-pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host=&#39;files.pythonhosted.org&#39;, port=443): Read timed out.
  7. LFU五种实现方式,从简单到复杂
  8. SQL Server中STATISTICS IO物理读和逻辑读的误区
  9. 使用onclick/表单submit跳转到其他页面
  10. python:用cv2简单实现图片的水平、垂直翻转