AQS为什么使用双向队列

AQS(AbstractQueuedSynchronizer)使用双向链表的主要原因是为了实现等待队列(Wait Queue)。这个等待队列是用于管理在同步器上等待的线程,例如在获取锁时发现锁被占用,线程就会加入到等待队列中等待。

使用双向链表的优点包括:

FIFO(先进先出)的顺序:
双向链表可以保持线程加入等待队列的顺序,即先加入的线程排在队列前面,后加入的线程排在队列后面。这有助于实现公平性,即等待时间较长的线程更有机会先获得锁。
便于在两端进行操作:
双向链表支持在队列的两端进行高效的操作,例如在头部添加新节点、在尾部移除节点等。这对于在等待队列中的线程状态的管理和维护是非常有用的。
节点的前驱和后继信息:
每个等待队列节点都有指向其前驱节点和后继节点的引用。这使得在等待队列中的线程状态的变化可以高效地传播,例如当前驱节点释放锁时,可以唤醒后继节点。这对于实现线程的唤醒和阻塞是关键的。
简化队列操作:
双向链表的结构可以简化在队列中的节点插入、删除和移动等操作,而这些操作是在多线程环境下需要高效完成的。
使用双向链表作为等待队列的底层数据结构,是为了提供高效的队列操作,保持线程等待的有序性,同时支持在节点之间传播状态信息,从而实现了 AQS 的核心同步机制。这种设计使得 AQS 能够灵活地支持各种同步器的实现。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/u013718071/article/details/134842417

posted on 2024-06-25 13:39  myf008  阅读(10)  评论(0编辑  收藏  举报

导航