下面一些注释摘自AbstractQueuedSynchronizer.Node:
/**
Status field, taking on only the values:
SIGNAL: The successor of this node is (or will soon be)
blocked (via park), so the current node must
unpark its successor when it releases or
To avoid races, acquire methods must
first indicate they need a signal,
then retry the atomic acquire, and then,
on failure, block.
CANCELLED: This node is cancelled due to timeout or interrupt.
Nodes never leave this state. In particular,
a thread with cancelled node never again blocks.
CONDITION: This node is currently on a condition queue.
It will not be used as a sync queue node
until transferred, at which time the status
will be set to 0. (Use of this value here has
nothing to do with the other uses of the
field, but simplifies mechanics.)
PROPAGATE: A releaseShared should be propagated to other
This is set (for head node only) in
doReleaseShared to ensure propagation
continues, even if other operations have
since intervened.
0: None of the above
*The values are arranged numerically to simplify use.
Non-negative values mean that a node doesn't need to
So, most code doesn't need to check for particular
values, just for sign.
*The field is initialized to 0 for normal sync nodes, and
CONDITION for condition nodes. It is modified using CAS
-
(or when possible, unconditional volatile writes).
但是这些状态(粗体)都比较抽象,有比较直白的解释么?或者需要什么知识点才能看懂这些含义
链接描述
链接描述