Java---CountDownLatch
CountDownLatch
- 概念
- 工作原理
- 常用方法
- 使用场景
- 缺点
概念
CountDownLatch是在jdk1.5的时候引入的,位于java.util.concurrent并发包中,CountDownLatch叫做闭锁
.
CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其它线程执行完后再执行
.
工作原理
CountDownLatch是通过一个计数器
来实现的,计数器的初始化值为线程的数量
.每当一个线程完成了自己的任务后,计数器的值相应的减1.当计数器的值减到0时,表示所有的线程都已完成任务,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务.
常用方法
public CountDownLatch(int count)
CountDownLatch接收一个int型的参数,表示要等待的工作线程的个数public void await()
使当前线程进入同步队列等待,直到计数器的值减到0或者当前线程被中断,当前线程就会被唤醒.public boolean await(long timeout,TimeUnit unit)
带超时时间的await()public void CountDown()
使计数器的值减1,如果减到了0,则会唤醒所有等待在这个CountDownLatch上的线程.public long getCount()
获取CountDownLatch的数值,也就是计数器的值
使用场景
- 实现最大的并行性:
有时我们想同时启动多个线程,实现最大程度的并行性.如果我们创建一个初始计数器为1的CountDownLatch,多个线程在开始执行任务前首先CountDownLatch.await()在这个锁上等待,只需要主线程调用一次CountDown()方法就可以让其它所有等待的线程同时恢复执行.类似于赛跑,将多个线程放到起点,等待发令枪响,然后同时开跑. - 开始执行前等待N个线程完成各自的任务后,进行汇总合并:
例如,我们需要使用多线程统计完所有的数据之后,做一个汇总,就可以使用CountDownLatch
缺点
CountDownLatch是一次性的,计数器的值只能在构造方法中初始化一次,之后不能再次对其设置值,当CountDownLatch使用完毕后,它不能再次被使用.
Java---CountDownLatch相关推荐
- Java—CountDownLatch使用详解
关注微信公众号:CodingTechWork,一起学习进步. CountDownLatch介绍 CountDownLatch概述 CountDownLatch一般用作多线程倒计时计数器,强制它们等待其 ...
- Java CountDownLatch应用
Java的concurrent包里面的CountDownLatch其实可以把它看作一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器,也就是同时只能有一个线程去减这个计数 ...
- Java+CountDownLatch多任务处理优化
前言 项目有许多统计的功能,有些统计页面,要展示几个统计的结果,用户通过前台设置相关参数,后台实时统计并返回数据.后台查询正常查询结果是串行的. 最好的用户体验,就是每一个操作都可以实时的展示数据,3 ...
- Java CountDownLatch的两种常用场景
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/120506758 本文出自[赵彦军的博客] 文章目录 简介 场景1 让多个线程等待: ...
- latch.await java有什么作用_java相关:CountDownLatch源码解析之await()
java相关:CountDownLatch源码解析之await() 发布于 2020-6-18| 复制链接 摘记: CountDownLatch 源码解析-- await(),具体内容如下上一篇文章说 ...
- java多线程百米赛跑_JAVA CountDownLatch(倒计时计数器)用法实例
这篇文章主要介绍了JAVA CountDownLatch(倒计时计数器)用法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 方法说明: publ ...
- CyclicBarrier和CountDownLatch区别
这两天写多线程时,用到了CyclicBarrier,下意识的认为CyclicBarrier和CountDownLatch作用很像,就翻阅资料查了一下,说一下他们的区别吧 CyclicBarrier和C ...
- 多线程面试题_100多线程和Java并发面试问答–最终清单(PDF下载)
多线程面试题 在这篇文章中,我们将提供有关多线程和Java并发面试问答的综合文章. 编者注:并发始终是开发人员的挑战,编写并发程序可能非常困难. 引入并发时,有很多事情可能会崩溃,并且系统的复杂性会大 ...
- 汇总:1. Java基本功
23种设计模式 http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html 提升Java代码性能和安全性 https://bl ...
- 用java的io做一个代码计数器_Java中的程序计数器是什么
Java中的程序计数器是什么 程序计数器是当前线程正在执行的字节码的地址.程序计数器是线程隔离的,每一个线程在工作的时候都有一个独立的计数器. JAVA虚拟机管理的内存区域图 1.什么是程序计数器? ...
最新文章
- 面向对象----封装之proprty
- import _winreg:用python操作修改windows注册表
- python 预测算法_通过机器学习的线性回归算法预测股票走势(用Python实现)
- c4d打开没反应_掌握这3种C4D技巧,线框渲染效果图也就几秒的事
- Django Abstract Models使用下划线设置related_name
- Boost enable_if库的测试程序
- php 武汉海关对接_“双11”临近 海口海关全力备战跨境电商监管高峰
- 关于数据库的设计的一点思路
- 【每日算法Day 99】你们可能不知道只用20万赢到578万是什么概念
- 易到起死回生的背后,谁在指点江山?
- FreeSwitch WINDOWS无法支持H264
- MinDoc安装指南(v0.12)
- SSM用户注册登录案例
- 电脑计算机硬盘格式化,教你电脑怎么格式化本地磁盘
- 华为交换机配置acl规则
- 面试问题总结——关于YOLO系列(三)
- 网络流媒体(七)———PTSP
- 2012 快速减肥 美女舒淇的懒人减肥法
- 清华大学计算机相关夏令营,夏令营报名
- 支付宝回调app失败