Java并发控制——CountDownLatch如何实现?

2026-05-23 20:520阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2680个文字,预计阅读时间需要11分钟。

Java并发控制——CountDownLatch如何实现?

锁 + CountDownLatch 是一种同步工具类,允许一个或多个线程直接等待,直到其他线程完成特定的操作。使用场景:在一些应用场景中,需要等待某个条件满足后再继续执行。

一、闭锁 CountDownLatch

一个同步工具类,允许一个或者多个线程一直等待,直到其他线程的操作都执行完成之后再继续往下执行。

 

使用场景:在一些应用场合中,需要等待某个条件达到要求后才能做后面的事情;同时当线程都完成后也会触发事件,以便进行后面的操作。 这个时候就可以使用CountDownLatch。

 

CountDownLatch最重要的方法是countDown()和await(),前者主要是计数减一,后者是等待计数到0,如果没有到达0,就继续阻塞等待。

如上图,左边三只小熊,可以当成三个线程,每一只撞到栏杆,计数器就减1,这相当于执行了countDown方法;

 

右边有两只暴走小熊在等待计数器变为0,可以当成两个线程,执行了await方法;

 

最终左边三只暴走小熊抵达了栏杆处,计数器变为0,唤醒了右边的暴走小熊,暴走小熊就开始动起来了。

二、执行原理

CountDownLatch是基于AQS共享模式的使用。

 

如下图,我们通过给CountDownLatch构造函数传入state的值。

阅读全文

本文共计2680个文字,预计阅读时间需要11分钟。

Java并发控制——CountDownLatch如何实现?

锁 + CountDownLatch 是一种同步工具类,允许一个或多个线程直接等待,直到其他线程完成特定的操作。使用场景:在一些应用场景中,需要等待某个条件满足后再继续执行。

一、闭锁 CountDownLatch

一个同步工具类,允许一个或者多个线程一直等待,直到其他线程的操作都执行完成之后再继续往下执行。

 

使用场景:在一些应用场合中,需要等待某个条件达到要求后才能做后面的事情;同时当线程都完成后也会触发事件,以便进行后面的操作。 这个时候就可以使用CountDownLatch。

 

CountDownLatch最重要的方法是countDown()和await(),前者主要是计数减一,后者是等待计数到0,如果没有到达0,就继续阻塞等待。

如上图,左边三只小熊,可以当成三个线程,每一只撞到栏杆,计数器就减1,这相当于执行了countDown方法;

 

右边有两只暴走小熊在等待计数器变为0,可以当成两个线程,执行了await方法;

 

最终左边三只暴走小熊抵达了栏杆处,计数器变为0,唤醒了右边的暴走小熊,暴走小熊就开始动起来了。

二、执行原理

CountDownLatch是基于AQS共享模式的使用。

 

如下图,我们通过给CountDownLatch构造函数传入state的值。

阅读全文