AQS 简单介绍
发布日期:2021-05-12 16:26:16 浏览次数:12 分类:精选文章

本文共 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 ������������������������������������������������������������������������������������������������������������

  • ������������ Node ������������������������������
  • ���������������������������
  • ���������������������������������������������������������
  • 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 ������������������������������������������������

    上一篇:LeetCode 227. 基本计算器 (Java)
    下一篇:Java线程池ThreadPool简单介绍

    发表评论

    最新留言

    逛到本站,mark一下
    [***.202.152.39]2025年04月14日 16时38分40秒