AQS中为什么设置一个空的头节点
时间: 2024-01-24 19:20:41 浏览: 154
深入理解Java中的AQS.docx
在AQS(AbstractQueuedSynchronizer)的实现中,为了方便对等待线程的管理,使用了一个双向链表来存储等待节点(wait node)。而这个链表的头节点是一个空节点,也就是说,它不代表任何一个等待线程。
这个空节点的作用主要有两个:
1. 作为链表的头节点,方便对链表进行操作。由于等待线程的数量是动态变化的,如果没有一个头节点,那么链表的头部就需要特殊处理,增加了实现的复杂度。
2. 作为一个哨兵节点,方便对等待线程的入队和出队进行统一的处理。因为等待线程的数量是动态变化的,如果没有一个哨兵节点,那么对于入队和出队的处理就需要分别处理头部和尾部节点,增加了实现的复杂度。而通过使用一个空节点作为哨兵节点,可以将所有的入队和出队操作都统一成针对普通节点的操作,从而简化了实现的逻辑。
阅读全文