java多线程十二 闭锁CountDownLatch

CountDownLatch

CounyDownLatch是一个同步类,他允许一个或多个线程一直等待,直到其他线层的操作执行完成后再去执行。

A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes.

工作原理

CountDownLatch实现使用一个计数器,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1.当计数器值到达0时,它表示所有的线程已经完成了任务,然后再闭锁上等待的线程就可以恢复执行任务。

构造函数

CountDownLatch类只提供了一个构造函数

public CountDownLatch(int count) {...}

上面再描述CountDownLatch的工作原理时也说过,CountDownLatch实现使用一个计数器,而参数cout就是初始化计数器的值,该值一经初始化就不能再被修改。

常用API解析
await()方法

Causes the current thread to wait until the latch has counted down to zero, unless the thread is interrupted.

该方法用来式当前线程处于阻塞状态,知道闭锁中计数的值递减到0,或者线程被中断

await(long timeout, TimeUnit unit)

Causes the current thread to wait until the latch has counted down to zero, unless the thread is interrupted, or the specified waiting time elapses.

该方法同await()方法,多出的两个参数定义了等待时间,把阻塞线程恢复的条件变为了三个。计数值递减到0、线程中断、到达超时时间

countDown()方法

Decrements the count of the latch, releasing all waiting threads if the count reaches zero.

该方法用来递减闭锁中计数器的值,当值到达0时所有等待的线程将恢复执行。

getCount()方法

Returns the current count.

该方法获取当前计数器的值。

使用场景
  1. 实现最大的并行性:有时我们想同时启动多个线程,实现最大程度的并行性。例如,我们想测试一个单例类。如果我们创建一个初始计数为1的CountDownLatch,并让所有线程都在这个锁上等待,那么我们可以很轻松的完成测试。我们只需要顶用一次countDown()方法就可以让所有的等待线程同时恢复执行
  2. 开始执行前等待n个线程完成各自任务:例如应用程序启动类要确保在处理用户请求前,所有N个外部系统已经启动和运行了。
  3. 死锁检测:一个非常方便的使用场景是,你可以使用n个线程访问共享资源,在每次测试阶段的线程数目是不同的,并尝试产生死锁

参考:
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html
http://www.importnew.com/15731.html

CountDownLatchJava并发编程中的一种同步工具类。它的作用是允许一个或多个线程等待其他线程完成操作。CountDownLatch的构造函数接收一个计数值,当计数值变为0时,等待的线程就会被唤醒。使用CountDownLatch可以实现多线程并发编程中的线程协作。 与使用join方法等待多个线程执行完毕不同,CountDownLatch相对灵活。可以通过调用countDown方法来减少计数,唤醒被阻塞的线程。这使得多个线程可以同时进行,并在一定条件下等待其他线程完成后再继续执行。 CountDownLatch一般称为闭锁或计数器,它是Java并发编程中的一种多线程同步工具。它属于AQS(AbstractQueuedSynchronizer)体系的一员,可以实现线程之间的协作和同步操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java多线程并发工具类](https://download.csdn.net/download/weixin_38713057/13756829)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [java多线程并发CountDownLatch](https://blog.csdn.net/weixin_42419762/article/details/116220340)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [多线程编程之 CountDownLatch](https://blog.csdn.net/jiangxiayouyu/article/details/118107977)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值