为什么说compareAndSetTail是快速尝试添加呢?

为什么说AbstractQueuedSynchronizer的addWaiter要在enq前使用快速尝试添加呢? 这一段代码的逻辑在enq中也存在, 那么这段代码存在的意义是什么呢?在什么场景下比直接enq要快呢?

private Node addWaiterNode mode { Node node = new NodeThread.currentThread, mode; // 快速尝试在尾部添加 Node pred = tail; if pred != null { node.prev = pred; if compareAndSetTailpred, node { pred.next = node; return node; } } enqnode; return node;
} private Node enqfinal Node node { for ;; { Node t = tail; if t == null { // Must initialize if compareAndSetHeadnew Node tail = head; } else { node.prev = t; if compareAndSetTailt, node { t.next = node; return t; } }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注