AbstractQueuedSynchronizer


简要JUC常识概念总结: https://www.it610.com/article/1354764805973553152.htm

同步器AQS

作者是Doug Lea @since 1.5

+AbstractOwnableSynchronizer 
 +AbstractQueuedSynchronizer

   首先是AbstractOwnableSynchronizer,一个独占同步器。

   然后是AbstractQueuedSynchronizer,之前一知半解,今天来正式了解一下。

 首先是第一句话,这个类为实现阻塞锁和依赖先进先出等待队列的同步器提供了框架。所以说这是一个基础的架构。

然后是类结构如上,首先是Node内部静态类

这个类是一个装有Node的等待队列。其次这个等待队列是CLH的变种。https://blog.csdn.net/weixin_44771116/article/details/113444682

什么是CLH:

  1. 自旋锁。

  2. 基于链表的自旋锁,通过不断轮询前驱节点的状态,判断自身是继续休息还是可以去尝试获取锁,能确保无饥饿性(线程资源的分配不是根据先到先得的,获得资源存在了一定的“运气”,一个线程因为种种原因无法获得所需要的资源,导致无法执行,称为饥饿)并提供先来先服务的公平性。

AQS就是基于CLH的变种,具体的变种的地方可能是因为用户可以实现自己的各种锁,比如非公平锁?后面再确认。

相关