首页 > 其他分享 >锁和并发(2)AQS

锁和并发(2)AQS

时间:2022-08-20 11:56:09浏览次数:48  
标签:状态 队列 AQS -- 并发 线程 唤醒

1.AQS具备的特性:

  阻塞等待队列   共享/独占   公平/非公平 可重入   允许中断  

2.Aqs的抽象模型:

     2.1.ReentrantLock  juc lock接口实现,实现是基于AQS,需要手动加锁跟解锁  ReentrantLock lock(),unlock()     悲观锁  独占 AQS         1.volatile 修饰的 state 作为标识 记录加锁次数  可重入次数 状态   state == 0  无锁状态       2.线程标记   ExclusiveOwnerThread       3.队列 该锁为 同步队列 CLH 队列           3.1 队列主要包括head 头指针           3.2 tail 尾指针 3.3 node 线程信息                                            node 中包含 线程信息                                              1.包含prev 头节点指向前一个线程                                              2.包含next 节点指向后一个线程                                              3.witastate 修饰的信号状态                                              4.thread 线程信息         锁释放后 会去唤醒下一个线程,而不是所有线程,  阻塞是使用的unsafe魔术类的pack()和unpack()方法

2.2waitsate 信号量状态:

  SIGNAL  -1  可被唤醒状态   CONDITION -2 条件等待   PROPAGATE -3 //传播 广播   CANCELLED 1 异常状态      0 初始状态          // 从0-->-1--> 才可以被唤醒状态        // 然后,在下一轮循环中阻塞       // 为什么 clh 队列 waitState 从0 --> -1 --> 0 --> -1       //  0 -->-1 持有锁的线程释放锁的时候,需要判断head节点的 waitState是否不是0,去唤醒队列中的第一个非null的线程。 唤醒后继续走循环 尝试获取锁       // 可能再次失败,(非公平状态) -1 -->0 变为阻塞状态。       // 非公平锁时,抢占问题。        

标签:状态,队列,AQS,--,并发,线程,唤醒
From: https://www.cnblogs.com/dhdnm/p/16607437.html

相关文章

  • 锁与并发 synchronized(1)
     1.synchronized锁的升级过程:  由于并发量不同,争抢的激烈程度不同出现锁的升级。锁升级不可逆。 2.为什么要使用锁。对共有资源的操作,因为对......
  • 一台服务器​最大并发 TCP 连接数多少
    一台服务器​最大并发TCP连接数多少入门小站 入门小站 2022-07-0622:10 发表于湖北收录于合集#Linux485个#tcp4个首先,问题中描述的65535个连接指的是......
  • 图解 Kafka 超高并发网络架构演进过程
    阅读本文大约需要30分钟。大家好,我是华仔,又跟大家见面了。上一篇作为专题系列的第一篇,我们深度剖析了关于Kafka存储架构设计的实现细节,今天开启第二篇,我们来深......
  • 38、python并发编程之IO模型
    38、python并发编程之IO模型  目录:一IO模型介绍二阻塞IO(blockingIO)三非阻塞IO(non-blockingIO)四多路复用IO(IOmultiplexing)五异步IO(A......
  • 37、python并发编程之协程
    37、python并发编程之协程  目录:一引子二协程介绍三Greenlet四Gevent介绍五Gevent之同步与异步六Gevent之应用举例一七Gevent之应用举例......
  • 32 python并发编程之背景知识
    32python并发编程之背景知识 目录:一引子二为什么要有操作系统三什么是操作系统四操作系统与普通软件的区别五操作系统发展史六总结视频链接:......
  • 对象完成具体业务逻辑在并发架构中产生的影响的思考
    思考回合制6v6游戏,战斗场景中的战斗调度器,会依次按组筛选双方对手进行kill,一般情况下,写一个公共方法kill(a,b)即可解决。这种方式,很容易能看出在并发模式下,会出现哪......
  • java 并发编程规约
    Rule1.【强制】创建线程或线程池时请指定有意义的线程名称,方便出错时回溯1)创建单条线程时直接指定线程名称```Threadt=newThread();t.setName("cleanup-thread......
  • 并发和并行
    原文:面试必考的:并发和并行有什么区别?某天下班后,我在家里进行电话面试,问到面试者这样一个问题:“能不能简单介绍一下你理解的并发和并行,并说明一下他们之间的关系”。但......
  • 高并发之网络IO模型
    你好,我是坤哥今天我们聊一下高并发下的网络IO模型高并发即我们所说的C10K(一个server服务1w个client),C10M,写出高并发的程序相信是每个后端程序员的追求,高并发架构......