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能做什么

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四川易点慧电子商务有限公司抖音小店安全正规

在如今网络购物日益普及的时代,消费者对于购物平台的选择越来越挑剔。四川易点慧电子商务有限公司抖音小店以其安全正规的经营模式,赢得了广大消费者的信赖和好评。本文将为您详细介绍四川易点慧电子商务有限公司抖音小店的优势和特点,让您在…

Vue3全家桶 - Vue3 - 【2】声明响应式数据(ref + reactive + toRef + toRefs)

声明响应式数据 一、 组合式API 1.1 ref() ref() 函数,可以创建 任何数据类型 的 响应式数据;🔺注意: 当值为 对象类型 时,会用 reactive() 自动转换它的 .value; ref 函数的内部实现依赖于 reactive 函…

代码随想录训练营第六天|242. 有效的字母异位词

242. 有效的字母异位词 已解答 简单 相关标签 相关企业 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s "anagram&q…

【AI】如何创建自己的自定义ChatGPT

如何创建自己的自定义ChatGPT 目录 如何创建自己的自定义ChatGPT大型语言模型(LLM)GPT模型ChatGPTOpenAI APILlamaIndexLangChain参考推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课本文将记录如何使用OpenAI GPT-3.5模型、LlamaIndex和LangChain创建自己的…

Sqoop 学习

参考视频 大数据Sqoop教程丨从零开始讲解大数据业务及数据采集和迁移需求_哔哩哔哩_bilibili 介绍 Sqoop是Hadoop生态体系和RDBMS(关系型数据库)体系之间传送数据的一种工具 Hadop生态系统:HDFS,Hbase,Hive等 RDBMS包…

java-ssm-基于jsp商场停车服务管理信息系统

java-ssm-基于jsp商场停车服务管理信息系统

为HTTP的2024端口设置重定向

为HTTP的2024端口设置重定向 server { listen 80:2024; server_name www.test.com; # 将HTTP的2024端口请求重定向到对应的HTTPS端口 return 301 https://$host:2024$request_uri;}

Python模块和包

模块和包 为什么要有模块和包 在Python中,模块(Module)和包(Package)是组织和管理代码的重要工具,有助于将代码划分为可维护和重用的单元。 模块(Module) 概念:模块是…

Notes用户还可自助改密码

大家好,才是真的好。 很多时候企业对员工的安全使用进行了硬性规定,例如严格的就是,每三个月或六个月要至少更改一次密码。 在Domino 8.5以后,功能上多了一个新特性,叫ID保险库,其实就是把用户的id标识符…

day40 整数拆分 不同的二叉搜索树

题目1&#xff1a;343 整数拆分 题目链接&#xff1a;343 整数拆分 题意 将正整数n拆成k个正整数的和&#xff08;k>2&#xff09;使整数的乘积最大化 尽量拆成若干个数值近似相等的数&#xff0c;这使用的是数学里面的思想&#xff1a;ab<(a^2b^2)/2 (当且仅当ab时&…

开源的java 代码分析库介绍

本文将为您详细讲解开源的 Java 代码分析库&#xff0c;以及如何安装这些库、它们的特性、区别和应用场景。Java 社区提供了多种代码分析工具&#xff0c;这些工具可以帮助您在 Java 应用程序中进行代码质量评估、性能分析、安全检查等功能。 1. CheckStyle 安装 - 通过…

tsv文件在大数据技术栈里的应用场景

是的&#xff0c;\t 是指制表符&#xff08;tab&#xff09;&#xff0c;它通常用作字段分隔符在 TSV&#xff08;Tab-Separated Values&#xff09;格式的文件中。TSV是一种简单的文本格式&#xff0c;它使用制表符来分隔每一列中的值&#xff0c;而每一行则代表一个数据记录。…

http升级https需要做什么

背景&#xff1a;随着现代网络时代的高速发展&#xff0c;网络安全方面的日益更新&#xff0c;实现网站https协议的数量也在不断增多&#xff0c;完善安全方面的因素也在逐步增加。 下面从最基础的网站http协议全面升级为https协议的流程做出说明。 目录 首先带大家一起先了解…

Unity类银河恶魔城学习记录9-1 9-2 P89,90 Character stats - Stat script源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Stat.cs using System.Collections; using System.Collections.Generic; us…

javascript:void(0);用法及常见问题解析

javascript:void(0);用法及常见问题解析 1. 简介 javascript:void(0); 是一种 JavaScript 代码,常用于以下几种情况: 创建一个空链接,点击后不会发生任何跳转或动作。 在需要返回值的地方,返回 undefined 值。 避免意外的副作用,例如在箭头函数中,如果函数体不使用括号…

【C++】---string的OJ题

【C】---string的OJ题 1.字符串转整形数字&#xff08;重要&#xff09;&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;思路展示&#xff08;3&#xff09;代码实现 2.字符串相加&#xff08;重要&#xff09;&#xff08;1&#xff09;题目描述&#xff08;2&am…

cJSON C语言库解析和生成JSON数据

文章目录 概述常用的API函数介绍范例代码应用拓展总结概述 cJSON是一个轻量级的C语言库,用于解析和生成JSON数据。它提供了简洁而高效的API,使得在C语言中处理JSON数据变得简单和方便。 以下是一些cJSON库的主要特点和用法: 解析JSON数据:使用cJSON_Parse函数可以将JSON…

迁移学习 修改预训练参数的网络模型

在迁移学习中&#xff0c;要使用预训练权重。在训练好的网络权重中&#xff0c;使用的是1000类的分类任务。而我们自己的分类任务中没有1000类&#xff0c;需要修改网络。如果将MobileNetV2(num_classes5)&#xff0c;我们的网络在最后输出是5类&#xff0c;与1训练好的1000类不…

如何保护企业云上安全

近日&#xff0c;CrowdStrike发布了《2024年全球威胁报告》&#xff0c;揭示了网络攻击的最新趋势。报告指出&#xff0c;网络攻击生态系统仍在持续增长&#xff0c;CrowdStrike在2023年观察到了34个新的威胁参与者。同时&#xff0c;攻击者正越来越多地瞄准云环境&#xff0c;…

Docker Desktop将镜像存储位置从C盘迁移到其它盘

一、简述 Docker Desktop默认安装在C盘,默认镜像存储位置在 C:\用户\Administrator\AppData\Local\Docker\wsl Docker Desktop 通过WSL2启动,会自动创建2个子系统,分别对应2个 vhdx 硬盘映像文件。 可以命令行执行wsl --list -v 看到 二、迁移步骤 1、在Docker Desktop…