Java并发包AQS锁实现原理是怎样的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计3531个文字,预计阅读时间需要15分钟。
一、包结构介绍我们查看java.util.concurrent.locks包下,可以发现主要包含以下类:
+ 可发现ReentrantLock和ReentrantReadWriteLock都继承自AbstractQueueSynchronizer类。
二、介绍AbstractQueuedSynchronizer类我们先来介绍AbstractQueuedSynchronizer类。
一、包结构介绍
我们查看下java.util.concurrent.locks包下面,发现主要包含如下类:
可以发现ReentrantLock和ReentrantReadWriteLock都是AbstractQueueSynchronizer类。我们先来介绍下AbstractQueuedSynchronizer类。
二、AbstractQueuedSynchronizer
AbstractQueuedSynchronizer,简写为AQS,抽象队列同步器。它是一个用于构建锁和同步器的框架,许多同步器都可以通过AQS很容易并且高效的构造出来,以下都是通过ASQ构造出来的:ReentrantLock,Semaphore,CountDownLatch,ReentrantReadWriteLock,SynchronousQueue。
三、AQS原理
AQS是通过队列来辅助实现线程同步的,线程并发争夺state资源,争夺失败的则进入等待队列(同步队列)并进入阻塞状态,在state资源被释放之后,从队列头唤醒被阻塞的线程节点,进行state资源的竞争。
这样势必会涉及很频繁的队列入队出队操作,以及线程的阻塞唤醒操作。
本文共计3531个文字,预计阅读时间需要15分钟。
一、包结构介绍我们查看java.util.concurrent.locks包下,可以发现主要包含以下类:
+ 可发现ReentrantLock和ReentrantReadWriteLock都继承自AbstractQueueSynchronizer类。
二、介绍AbstractQueuedSynchronizer类我们先来介绍AbstractQueuedSynchronizer类。
一、包结构介绍
我们查看下java.util.concurrent.locks包下面,发现主要包含如下类:
可以发现ReentrantLock和ReentrantReadWriteLock都是AbstractQueueSynchronizer类。我们先来介绍下AbstractQueuedSynchronizer类。
二、AbstractQueuedSynchronizer
AbstractQueuedSynchronizer,简写为AQS,抽象队列同步器。它是一个用于构建锁和同步器的框架,许多同步器都可以通过AQS很容易并且高效的构造出来,以下都是通过ASQ构造出来的:ReentrantLock,Semaphore,CountDownLatch,ReentrantReadWriteLock,SynchronousQueue。
三、AQS原理
AQS是通过队列来辅助实现线程同步的,线程并发争夺state资源,争夺失败的则进入等待队列(同步队列)并进入阻塞状态,在state资源被释放之后,从队列头唤醒被阻塞的线程节点,进行state资源的竞争。
这样势必会涉及很频繁的队列入队出队操作,以及线程的阻塞唤醒操作。

