Java线程之CountDownLatch

CountDownLatch是一个高级的线程同步工具,可以理解为一个闸门,先运行一些线程,计算出一些结果,满足条件后,开闸,然后另一些线程启动。换句话说,它将多个线程分为2类,一类开闸前运行,一类开闸后运行。对于开闸后运行的线程,调用await()方法后,进入等待状态,等待开闸。它内部有一个计数器,初始状态计数器为用户设定的正整数,当开闸前某个线程运行完毕后,调用它的countDown()方法
摘要由CSDN通过智能技术生成

CountDownLatch是一个高级的线程同步工具,可以理解为一个闸门,先运行一些线程,计算出一些结果,满足条件后,开闸,然后另一些线程启动。换句话说,它将多个线程分为2类,一类开闸前运行,一类开闸后运行。

对于开闸后运行的线程,调用await()方法后,进入等待状态,等待开闸。它内部有一个计数器,初始状态计数器为用户设定的正整数,当开闸前某个线程运行完毕后,调用它的countDown()方法将计数器减1,当计数器为0时,开闸。

典型应用:统计硬盘上文件的数目。针对硬盘的每一个分区,例如C盘、D盘、E盘等,单独开一个线程统计该分区内的文件数。另设一个线程对所有分区的文件数汇总,显示给用户,此线程运行在开闸后,必须等每个分区都统计完毕之后,开闸,汇总报告给用户。countDown()方法最好不要由开闸前的线程直接调用,而应该由汇总线程对其进行封装,开闸前的线程之调用封装后的方法,CountDownLatch尽量对开闸前的线程透明。

/**
 * 负责将多线程查找的各分区文件数目合并汇总,
 * 打印出硬盘上存在的总文件数
 */
class CombineResult implements Runnable {

	private CountDownLatch latch;
	private long fileCount;
	
	public CombineResult(int n) {
		latch = new CountDownLatch(n);
		fileCount = 0;
	}
	
	public synchronized void commitResult(long count) {
		fileCount
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值