AbstractQueuedSynchronizer.Node

1,088 阅读1分钟

java.util.concurrent.locks 
static final class AbstractQueuedSynchronizer.Node
extends Object

等待队列的节点类

这个等待队列是“CLH”(三个人名:Craig, Landin 和 Hagersten)锁队列的一个变种。CLH锁通常被用于自旋锁。取而代之我们将他们用于阻塞同步器,但是使用相同的基本策略,在其节点的前身中保存关于线程的一些控制信息。每个节点的一个“statue”字段记录着一个线程是否应该阻塞。一个节点当它的前任(等待节点)释放的时候,会被示意(接收了信号)。否则队列中每一个节点都充当一个特定通知风格的监视器,其中还包含了一个等待线程。虽然这个statue字段并不控制线程是否被授予锁。一个线程会尽量去请求,如果它是第一个进入队列中的。但是成为第一(进入队列的节点)并不能保证成功(请求)。它只给与了去竞争的权利。因此,当前释放竞争者线程可能需要从新等待。

为了入队到CLH锁,你可以一原子方式拼接节点入队作为队列新的尾部(节点)。至于出队,你只要设置头结点。