吃透Java并发十一:locks之AQS共享功能分析

一、概述

我们通过ReentrantLock的示例,分析了AQS的独占功能。本节将以CountDownLatch为例,分析AQS的共享功能。

CountDownLatch是一个辅助同步器类,用来作计数使用,它的作用有点类似于生活中的倒数计数器,先设定一个计数初始值,当计数降到0时,将会触发一些事件,如火箭的倒数计时。

初始计数值在构造CountDownLatch对象时传入,每调用一次 countDown() 方法,计数值就会减1。

线程可以调用CountDownLatch的await方法进入阻塞,当计数值降到0时,所有之前调用await阻塞的线程都会释放。

我们以CountDownLatch示例,假设现在有3个线程,ThreadA、ThreadB、mainThread,CountDownLatch初始计数为1:
CountDownLatch switcher = new CountDownLatch(1);

线程的调用时序如下:

//ThreadA调用await()方法等待

//ThreadB调用await()方法等待

//主线程main调用countDown()放行

二、AQS共享功能的原理

1、创建CountDownLatch

CountDownLatch的创建没什么特殊,调用唯一的构造器,传入一个初始计数值,内部实例化一个AQS子类:CountDownLatch switcher = new CountDownLatch(1);

    public

猜你喜欢

转载自blog.csdn.net/u013277209/article/details/104127435