Java并发控制——CountDownLatch如何实现?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2680个文字,预计阅读时间需要11分钟。
锁 + CountDownLatch 是一种同步工具类,允许一个或多个线程直接等待,直到其他线程完成特定的操作。使用场景:在一些应用场景中,需要等待某个条件满足后再继续执行。
一、闭锁 CountDownLatch
一个同步工具类,允许一个或者多个线程一直等待,直到其他线程的操作都执行完成之后再继续往下执行。
使用场景:在一些应用场合中,需要等待某个条件达到要求后才能做后面的事情;同时当线程都完成后也会触发事件,以便进行后面的操作。 这个时候就可以使用CountDownLatch。
CountDownLatch最重要的方法是countDown()和await(),前者主要是计数减一,后者是等待计数到0,如果没有到达0,就继续阻塞等待。
如上图,左边三只小熊,可以当成三个线程,每一只撞到栏杆,计数器就减1,这相当于执行了countDown方法;
右边有两只暴走小熊在等待计数器变为0,可以当成两个线程,执行了await方法;
最终左边三只暴走小熊抵达了栏杆处,计数器变为0,唤醒了右边的暴走小熊,暴走小熊就开始动起来了。
二、执行原理
CountDownLatch是基于AQS共享模式的使用。
如下图,我们通过给CountDownLatch构造函数传入state的值。
本文共计2680个文字,预计阅读时间需要11分钟。
锁 + CountDownLatch 是一种同步工具类,允许一个或多个线程直接等待,直到其他线程完成特定的操作。使用场景:在一些应用场景中,需要等待某个条件满足后再继续执行。
一、闭锁 CountDownLatch
一个同步工具类,允许一个或者多个线程一直等待,直到其他线程的操作都执行完成之后再继续往下执行。
使用场景:在一些应用场合中,需要等待某个条件达到要求后才能做后面的事情;同时当线程都完成后也会触发事件,以便进行后面的操作。 这个时候就可以使用CountDownLatch。
CountDownLatch最重要的方法是countDown()和await(),前者主要是计数减一,后者是等待计数到0,如果没有到达0,就继续阻塞等待。
如上图,左边三只小熊,可以当成三个线程,每一只撞到栏杆,计数器就减1,这相当于执行了countDown方法;
右边有两只暴走小熊在等待计数器变为0,可以当成两个线程,执行了await方法;
最终左边三只暴走小熊抵达了栏杆处,计数器变为0,唤醒了右边的暴走小熊,暴走小熊就开始动起来了。
二、执行原理
CountDownLatch是基于AQS共享模式的使用。
如下图,我们通过给CountDownLatch构造函数传入state的值。

