首页 > 其他分享 >AQS抽象队列同步器

AQS抽象队列同步器

时间:2022-12-27 10:58:52浏览次数:43  
标签:同步 AQS 同步器 队列 线程 节点

AbstractQueuedSynchronizer 抽象的队列同步器

AQS是volatile+CAS机制实现的锁模板,保证了代码的同步性和可见性。AQS定义了一套多线程访问共享资源的同步器框架,封装了线程阻塞等待挂起,解锁其他线程的逻辑,

AQS子类只需要根据状态变量,判断是否可获取锁,是否释放锁,使用LockSupport挂起,唤醒线程即可。

 

 AQS内部维护一个同步队列(CFH队列)(FIFO),元素就是包装了线程的Node。

同步队列中首节点是获取到锁的节点,它在释放锁时会唤醒后继节点,后继节点获取到锁的同时,会把自己设为首节点。

线程会先尝试获取锁,失败则封装成Node,CAS加入同步队列的尾部。在加入同步队列尾部时,会判断先驱节点是否是Head节点,并尝试加锁(可能先驱节点刚好释放锁),

否则线程进入阻塞等待。

标签:同步,AQS,同步器,队列,线程,节点
From: https://www.cnblogs.com/tyleaf/p/17007567.html

相关文章

  • Java同步器之ReentrantLock源码分析(一)
    一、概述ReentrantLock是Java并发包中提供的一个可重入的互斥锁。ReentrantLock和synchronized在基本用法,行为语义上都是类似的,同样都具有可重入性。只不过相比原生的Syn......
  • Java同步器之AQS源码分析
    一、简介AbstractQueuedSynchronizer(简称AQS),抽象的队列式的同步器,是Java并发包实现的基类。AQS用来构建锁和同步器的框架,使用AQS能简单且高效地构造出大量的应用广泛......
  • 根据身高重建队列
    假设有打乱顺序的一群人站成一个队列,数组people表示队列中一些人的属性(不一定按顺序)。每个people[i]=[hi,ki]表示第i个人的身高为hi,前面正好有ki个身高大于......
  • 消息队列
    消息队列就是一些消息的列表。用户可以在消息队列中添加消息和读取消息等。从这点上看,消息队列具有一定的FIFO特性,但是它可以实现消息的随机查询,比FIFO具有更大的优势。同......
  • Windows服务器【由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作】
    原文:Windows服务器【由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作】问题调查-奋斗的大橙子-博客园(cnblogs.com)因为我的服务器上也遇到了这个问题,经查......
  • 优先队列(std_priority_queue)
    title:优先队列(std::priority_queue)date:2022-11-1715:50:12tags:算法本文章遵守知识共享协议CC-BY-NC-SA,转载时须在文章的任一位置附上原文链接和作者署名(ric......
  • 数据结构第二节——队列
    二、数据结构第二节——队列和学习栈的思路一样,首先我们来用数组的方式实现队列。借此帮助我们更好的理解“队列”的构成。例一代码源-107#include<bits/stdc++.h......
  • 数据结构28-优先级队列_实现
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width......
  • SpringBoot2.x系列教程64--SpringBoot整合消息队列之RabbitMQ安装及环境变量配置
    SpringBoot2.x系列教程64--SpringBoot整合消息队列之RabbitMQ安装及环境变量配置作者:一一哥一.准备安装包Erlang-->​​http://www.erlang.org/downloads​​RabbitMQ-->​......
  • SpringBoot2.x系列教程60--SpringBoot整合消息队列之ActiveMQ环境配置
    SpringBoot2.x系列教程60--SpringBoot整合消息队列之ActiveMQ环境配置作者:一一哥我在上一章节中,给大家介绍了JMS协议及消息中间件,消息队列等概念,本节中我会介绍ActiveMQ的概......