Java并发编程: AQS

文章目录

  • 一、前置知识
  • 二、什么是AQS
  • 三、使用AQS框架的锁和同步器
    • 1、ReentrantLock
    • 2、ReentrantReadWriteLock
    • 3、CountDownLatch
    • 4、CyclicBarrier
    • 5、Semaphore:信号量
  • 四、锁和同步器的关系
    • 1、锁:面向锁的使用者
    • 2、同步器:面向锁的实现者
  • 五、AQS能做什么

一、前置知识

(1)可重入锁
(2)自旋思想
(3)LockSupport
(4)数据结构之双向链表
(5)设计模式之模板方法设计模式:设计模式: 模板方法模式

二、什么是AQS

AQS全称是AbstractQueuedSynchronizer: 抽象队列同步器,是阻塞锁和相关同步器工具的框架是整个JUC体系的基石,通过内置的FIFO队列来完成资源获取线程的队列工作,并通过一个int类型变量标识持有锁的状态

  • 资源(state)
  • CLH队列:双向队列
    在这里插入图片描述

三、使用AQS框架的锁和同步器

1、ReentrantLock

(1)锁实现

  • 公平锁FairSync
  • 非公平锁NonFairSync
    (2)Condition
  • 多线程协调通讯类
  • Condition维护了一个线程等待队列,也是多线程间协调通信的工具,是的某个线程一起等待某个条件,满足条件才能唤醒,唤醒后,还需要重新竞争锁。

2、ReentrantReadWriteLock

3、CountDownLatch

(1)通过一个计数器来实现,每当一个线程执行完成后,计数器的值就减1,当计数器的值为0时,则表示所有的线程都执行完毕。
(2)await():调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行。
(3)await(long timeout, TimeUnit unit):等待一定的时间后count值还没有变为0的话就会继续执行。
(4)countDown():将count值减1

4、CyclicBarrier

5、Semaphore:信号量

四、锁和同步器的关系

1、锁:面向锁的使用者

定义了程序员和锁交互的使用层API,隐藏了实现细节,调用API即可。

2、同步器:面向锁的实现者

统一规范并简化了锁的实现,屏蔽了同步状态管理、阻塞线程队列和通知、唤醒机制等,是一切锁和同步组件实现的公共基础部分。

五、AQS能做什么

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/449392.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Material UI 5 学习03-Text Field文本输入框

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Text Field文本输入框 一、最基本的本文输入框1、基础示例2、一些表单属性3、验证 二、多行文本 一、最基本的本文输入框 1、基础示例 import {Box, TextField} from "…

九、ELMo 语言模型

ELMo(Embeddings from Language Models)兼顾了两个问题:一是词语用法在语义和语法上的复杂特点;二是随着语言环境的改变,这些用法也应该随之改变,解决多义词的问题。 ELMo 语言模型原理图: ELMo…

Matlab如何批量读取Excel数据?科研效率UpUp第3期

上一篇文章中,讲了如何批量统计一组Excel数据中多个站位所有物种的数量之和(Matlab如何高效统计多站数据中各站目标总数?科研效率UpUp第2期)。 进一步,假如我们有多组Excel数据,也就是多个Excel表格&#…

【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-先导篇)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12601310.html 案例分析篇01:软件架构设计考点架构风格及质量属性(2024年软考高级系统…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Navigation)

Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(NavDestination的子组件…

使用 Amazon Bedrock 和 RAG 构建 Text2SQL 行业数据查询助手

背景 随着企业数据量的持续增长,如何让非技术人员也能轻松分析数据、获得商业洞察成为了当前的痛点。本文将介绍如何使用亚马逊云科技的大语言模型服务 Amazon Bedrock 以及 RAG (Retrieval Augmented Generation),实现 Text2SQL 功能,以此为…

图论(二)之最短路问题

最短路 Dijkstra求最短路 文章目录 最短路Dijkstra求最短路栗题思想题目代码代码如下bellman-ford算法分析只能用bellman-ford来解决的题型题目完整代码 spfa求最短路spfa 算法思路明确一下松弛的概念。spfa算法文字说明:spfa 图解: 题目完整代码总结ti…

C#/WPF 清理任务栏托盘图标缓存

在我们开发Windows客户端程序时,往往会出现程序退出后,任务还保留之前程序的缓存图标。每打开关闭一次程序,图标会一直增加,导致托盘存放大量缓存图标。为了解决这个问题,我们可以通过下面的程序清理任务栏托盘图标缓存…

Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 4-1、线条平滑曲面(原始图形)

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata fr…

案例分析篇03:一篇文章搞定软考设计模式考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12601310.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

WorkPlus Meet提供高度安全的私有化会议解决方案,保护企业隐私

在企业内部沟通和机密信息传递方面,保护企业的隐私和保证会议质量是至关重要的。作为一款私有化会议解决方案,WorkPlus Meet以其卓越的性能和高度安全的特性,助力企业建立安全可靠的私有化会议平台。 为何选择WorkPlus Meet作为私有化会议的安…

Editor.md-编辑器

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

msfconsole中db_namp的使用方法以及如何让msf连接数据库

一、db_nmap使用方法 1.打开数据库 1.1查看数据库postgresql连接状态 systemctl status postgresql查看数据库postgresql连接状态、 1.2启动postgresql systemctl start postgresql启动postgresql 1.3初始化 msfdb init初始化 2.C段扫描(db_nmap的使用) 2.1 db_nmap -sP 192…

多维时序 | Matlab实现VMD-CNN-LSTM变分模态分解结合卷积神经网络结合长短期记忆神经网络多变量时间序列预测

多维时序 | Matlab实现VMD-CNN-LSTM变分模态分解结合卷积神经网络结合长短期记忆神经网络多变量时间序列预测 目录 多维时序 | Matlab实现VMD-CNN-LSTM变分模态分解结合卷积神经网络结合长短期记忆神经网络多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介…

wxss和css的区别

目录 1. 语法差异 2. 尺寸单位 3. 样式导入 WXSS 示例代码: CSS 示例代码: 4. 组件和属性的支持 总结 WXSS (WeiXin Style Sheets) 和 CSS (Cascading Style Sheets) 都是用于描述文档样式的语言,但它们在微信小程序和网页开发中有一些…

部署私有KMS服务器,并设置自动激活Windows和office

介绍 vlmcsd是一个KMS激活服务器的模拟器,可以在Windows Server之外的平台上部署自己的KMS服务器。它是一个开源项目,由Wind4开发,目前在Linux上运行(包括Android、FreeBSD、Solaris、Minix、Mac OS、iOS和Windows等)…

基于cnn的卷机神经网络的项目毕业课题实践应用(毕业选题-深度学习-卷及神经网络)

这些项目可以作为毕业课题选择,共计超过20个: 往期热门项目回顾: 计算机视觉项目大集合 改进的yolo目标检测-测距测速 路径规划算法 图像去雨去雾目标检测测距项目 交通标志识别项目 yolo系列-重磅yolov9界面-最新的yolo 姿态识别…

OSI七层模型TCP四层模型横向对比

OSI 理论模型(Open Systems Interconnection Model)和TCP/IP模型 七层每一层对应英文 应用层(Application Layer) 表示层(Presentation Layer) 会话层(Session Layer) 传输层&#x…

javaEE11(servlet课后习题1,3(将思路实现一下))

1.在第5章课后习题2基础上,基于jspservletjavabean实现学生表的增删改查。 数据处理交给Servlet package servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.servlet.ServletException;import javax.servlet.an…

LeetCode707:设计链表

题目描述 实现 MyLinkedList 类: MyLinkedList() 初始化 MyLinkedList 对象。 int get(int index) 获取链表中下标为 index 的节点的值。如果下标无效,则返回 -1 。 void addAtHead(int val) 将一个值为 val 的节点插入到链表中第一个元素之前。在插入完…