当前位置:   article > 正文

AQS阻塞队列_aqs为什么维护唤醒后是单向队列

aqs为什么维护唤醒后是单向队列

AQS阻塞队列管理

Craig, Landin, and Hagersten的CLH锁
这里写图片描述

  • 而在AQS中有一个内部类ConditionObject实现了Condition接口。所谓条件队列,其实是一个单向链表;在讲解AQS的实现原理时只讲解了AQS队列,AQS队列前面讲过是双向链表结构。也就是说在AQS整体实现中维护了两个链表:一个是“同步队列”双向链表(这里简称AQS队列),另一个是“条件队列”单向链表。

  • Node数据结构

static final class Node {

    volatile int waitStatus;//节点状态

    volatile Node prev;//前指针 指向前一个节点

    volatile Node next;//后指针指向后一个节点

    volatile Thread thread;//线程实例

    Node nextWaiter;//下一个等待节点

    //共享类型
    static final Node SHARED = new Node();
    //独占类型
    static final Node EXCLUSIVE = null;

    /**状态列表,对应waitStatus字段值*/
    //线程取消类型
    static final int CANCELLED =  1;
    //线程唤醒状态类型 对应condition的 signal、signalAll方法
    static final int SIGNAL    = -1;
    //线程阻塞状态类型,对应condition的await方法
    static final int CONDITION = -2;
    //对应共享类型释放资源时,传播唤醒线程状态
    static 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/692980
推荐阅读
相关标签
  

闽ICP备14008679号