
本文共 4048 字,大约阅读时间需要 13 分钟。
AQS ���������������
AQS���AbstractQueuedSynchronizer������ Java ������������������������������������������ FIFO������������������������������������������������������������������AQS ��������������������������������������������������������������������������������������������������������������������������������������������������������������������� AQS ���������������������
AQS ������������
AQS ������������������������������������������������������
head
������������������������������������tail
������������������������������������state
������������������������������������������������������������������������������������ 0 ������������������������������������������������tryAcquire
���������������������������������������������������������������������
Node ���������
Node ��� AQS ��������������������������������������������������������������� static final
���������������������������������Node ���������������������������
prev
������������������next
������������������waitStatus
���������������������������������������������������������������thread
���������������������
Node ��������������������� isShared()
���predecessor()
������������������������������������������������������
���������
AQS ���������������������������������������
tryAcquire(int arg)
������������������������������������������acquire(int arg)
������������������������������������������������tryAcquire()
tryAcquire
��������� AQS ��������������������������������������������������������������������������������������������� UnsupportedOperationException
���������������������������
acquire()
acquire
������������������������������
public final void acquire(int arg) { if (!tryAcquire(arg) && acquireQueued(addWaiter(Node.EXCLUSIVE), arg)) selfInterrupt();}
���������������������
tryAcquire
���������������������������������������tryAcquire
��������������� addWaiter
������������������������������������AddWaiter()
addWaiter
������������������������������������������������������������������������������������������������������������
enq()
enq
���������������������������������������������������������������������������������������������
private Node enq(final Node node) { for (;;) { Node t = tail; if (t == null) { if (compareAndSetHead(new Node())) tail = head; } else { node.prev = t; if (compareAndSetTail(t, node)) { t.next = node; return t; } } }}
���������������������������������������������������������������������
acquireQueued()
acquireQueued
������������������������������������������������������������
���������������
��� AQS ������������������������ LockSupport.park()
��� Thread.interrupted()
������������������������������������������������ CPU ���������������������������������������������������������������������������������������������������������������������������
���������
AQS ���������������������������������
tryRelease(int arg)
������������������������������������release(int arg)
������������������������������������release
������������������������������
public final boolean release(int arg) { if (tryRelease(arg)) unparkSuccessor(head); return false;}
���������������������
tryRelease
���������������������������������������
AQS ������ FIFO ���������������������������������������������������������������������������������������������������������������������������������BlockSize ������������������������������������������������������������������������������������AQS ��������������������������������������������������������� Java ������������������������������������������������
发表评论
最新留言
关于作者
