锁策略--
文章目录
- 乐观锁和悲观锁
- 轻量锁和重量锁
- 自旋锁和挂起等待锁
- 读写锁和互斥锁
- 可重入锁和不可重入锁
- 公平锁和非公平锁
乐观锁和悲观锁
乐观锁在执行任务前预期竞争不激烈,就先不添加锁等到了发生了真实的锁竞争再进行锁竞争
乐观锁适用于锁竞争不激烈的情况下
悲观锁在执行任务前预期竞争激烈,直接添加锁再执行任务
悲观锁适用于锁竞争激烈的情况下
轻量锁和重量锁
轻量级锁:加锁过程比较简单,用到的资源比较少,用户态的操作(java层面就可以完成加锁)
重量级锁:加锁过程比较复杂,用到的资源比较多,典型的是内核态的一些操作
JVM 会根据实际的运行情况,自动选择合适的锁类型。 开发者不需要手动指定使用哪种锁。 但是,了解轻量级锁和重量级锁的原理,可以帮助我们更好地理解 synchronized 的性能特点,并编写更高效的并发代码。
自旋锁和挂起等待锁
自旋锁:不停地检查锁是否被释放,一旦被释放就直接获取锁资源
挂起等待锁:阻塞等待,等待被唤醒
读写锁和互斥锁
读写锁分为读锁和写锁
读操作时加读锁(共享锁),同时加锁互不影响,多个锁可以共存
写操作时加写锁(排他锁),不能同时加锁,只允许一个写锁执行任务
读锁与读锁可以共存
读锁与写锁不可以共存
写锁与写锁不可以共存
互斥锁是一种最基本的锁机制,在任何情况下保证只有一个线程可以持有锁,并访问被保护的共享资源,其他线程必须保证锁释放后才能去竞争锁
可重入锁和不可重入锁
可重入锁:对一把锁连续加锁(连续加锁也需要连续解锁)不形成死锁 可重入锁是指,当一个线程已经获取了某个锁之后,可以再次获取同一个锁,而不会被阻塞。 也就是说,同一个线程可以多次进入被该锁保护的同步代码块。
不可重入锁是指,当一个线程已经获取了某个锁之后,如果再次尝试获取同一个锁,则会被阻塞,即使该锁的持有者是当前线程。
公平锁和非公平锁
公平锁:当两个线程竞争锁时先要求锁的线程获得锁
非公平锁:允许线程在获取锁时不遵循请求顺序。也就是说,如果一个线程在锁可用时,它可以直接获取锁,而不必等待其他线程释放锁。这种策略可能导致某些线程长时间得不到锁(饥饿现象)。
相关文章:
锁策略--
文章目录 乐观锁和悲观锁轻量锁和重量锁自旋锁和挂起等待锁读写锁和互斥锁可重入锁和不可重入锁公平锁和非公平锁 乐观锁和悲观锁 乐观锁在执行任务前预期竞争不激烈,就先不添加锁等到了发生了真实的锁竞争再进行锁竞争 乐观锁适用于锁竞争不激烈的情况下 悲观锁在…...
IO多路复用
BIO(同步阻塞) 当客户端请求连接到服务端请求过程中其实是通过socket连接,socket的意思其实就是插座,可以理解成手机需要充电,这里的电要从服务端获取,手机的充电口和服务端的插座都是socket,假…...
AF3 OpenFoldSingleDataset类解读
AlphaFold3 data_modules 模块的 OpenFoldSingleDataset类 是 OpenFold 中的一个数据集类,继承自 torch.utils.data.Dataset,用于加载和处理蛋白质结构数据,以支持 AlphaFold3 相关的深度学习任务。OpenFoldSingleDataset 读取的多序列比对(MSA)数据、模板(template)特征…...
高级java每日一道面试题-2025年3月21日-微服务篇[Nacos篇]-什么是Nacos?
如果有遗漏,评论区告诉我进行补充 面试官: 什么是Nacos? 我回答: Nacos综合解析 一、Nacos的定义与功能 Nacos是阿里巴巴开源的一个专注于动态服务发现、配置管理和服务管理平台,其名称来源于Dynamic Naming and Configuration Service(…...
C++练习3
练习 终端上输出 3.14 要求实现 myDouble的 operator operator- operator* (不考虑进位) class myOut { 没有私有成员 只有公开函数 } myOut out; out << 1 终端输出1 out << 3.14 终端输出3.14 out << "hello" 终…...
Deepseek API+Python 测试用例一键生成与导出 V1.0.6(加入分块策略,返回更完整可靠)
随着Deepseek APIPython 测试用例一键生成与导出 V1.0.5的试用不断深入,在处理需求文档内容时,会出现由于文档内容过长导致大模型返回的用例远达不到我们的期望数量;另一方面,是接口文档的读取,如果接口数量过多&#…...
JDK 17 + Spring Boot 3 全栈升级实战指南--从语法革新到云原生,解锁企业级开发新范式
🚀 技术升级背景 随着 JDK 17(LTS) 与 Spring Boot 3 的发布,Java 生态迎来性能与开发效率的双重飞跃。相较于 JDK 8,JDK 17 在语法、API、GC 等方面均有显著优化,而 Spring Boot 3 则全面拥抱 Jakarta EE…...
phpStorm2021.3.3在windows系统上配置Xdebug调试
开始 首先根据PHP的版本下载并安装对应的Xdebug扩展在phpStorm工具中找到设置添加服务添加php web page配置完信息后 首先根据PHP的版本下载并安装对应的Xdebug扩展 我使用的是phpStudy工具,直接在php对应的版本中开启xdebug扩展, 并在php.ini中添加如下…...
DFS/BFS简介以及剪枝技巧
DFS简介 DFS含义 ⭐ DFS,即Depth-first-search,是深度优先搜索的简称。 它的主要思路是一直沿当前分支搜索,当搜索到尽头之后返回,再逐步向其他地方扩散。 我们可以通过一个树形结构说明DFS的遍历顺序 A/ | \B C D/ \ |E…...
LeetCode[15]三数之和
思路: 一开始我想的用哈希表来做,但是怎么想怎么麻烦,最后看解析,发现人家用的双指针,那我来讲一下我这道题理解的双指针。 这道题使用双指针之前一定要给数组进行排序,ok为什么排序?因为我需要…...
高性能计算面经
高性能计算面经 C八股文真景一面凉经自我介绍,介绍一下你做过的加速的模块(叠噪,噪声跟原图有什么关系?)OpenGL和OpenCL有什么区别?**1. 核心用途****2. 编程模型****3. 硬件抽象****4. API设计****5. 典型应用场景****6. 互操作性…...
HTML 标签类型全面介绍
HTML 标签类型全面介绍 HTML(HyperText Markup Language)是构建 Web 页面结构的基础语言。HTML 由不同类型的标签组成,每种标签都有特定的用途。本文将全面介绍 HTML 标签的分类及其用法。 1. HTML 标签概述 HTML 标签通常成对出现…...
【漫话机器学习系列】168.最大最小值缩放(Min-Max Scaling)
在机器学习和数据预处理中,特征缩放(Feature Scaling) 是一个至关重要的步骤,它可以使模型更稳定,提高训练速度,并优化收敛效果。最大最小值缩放(Min-Max Scaling) 是其中最常见的方…...
Spring Boot中对同一接口定义多个切面的示例,分别通过接口方式和注解方式实现切面排序,并对比差异
以下是Spring Boot中对同一接口定义多个切面的示例,分别通过接口方式和注解方式实现切面排序,并对比差异: 一、接口方式实现切面排序 1. 定义接口 // 服务接口 public interface MyService {void methodA();void methodB(); }// 接口实现类…...
基于SpringBoot的高校学术交流平台
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
数据治理的专题库
数据治理专题库的全面解析 一、专题库的定义与定位 数据治理专题库是围绕特定业务领域或场景构建的专业化数据库,其核心在于业务导向性和自主性。与基础库(如人口、法人、地理信息等跨部门核心实体数据)和主题库(如市场监管中的…...
【MathType】MathType安装和嵌入word
MathType 是一款功能强大的数学公式编辑器,广泛应用于学术论文、教材编写、科研报告等领域。它支持多种数学符号、公式排版,并且与 Microsoft Word、Google Docs、WPS 等办公软件兼容,极大地方便了数学公式的输入和编辑 记录一下安装的过程 …...
mediacodec服务启动时加载media_codecs.xml
media.codec服务启动时, 会创建 implementation::Omx 和 implementation::OmxStore, 构造 Omx时, 会解析codec相关的xml文件,一般从会如下目录中, // from getDefaultSearchDirs() { "/product/etc",&quo…...
Scala(三)
本节课学习了函数式编程,了解到它与Java、C函数式编程的区别;学习了函数的基础,了解到它的基本语法、函数和方法的定义、函数高级。。。学习到函数至简原则,高阶函数,匿名函数等。 函数的定义 函数基本语法 例子&…...
kafka 报错消息太大解决方案 Broker: Message size too large
kafka-configs.sh --bootstrap-server localhost:9092 \ --alter --entity-type topics \ --entity-name sim_result_zy \ --add-config max.message.bytes10485880 学习营课程...
APScheduler定时
异步IO 定时(协程) import asyncio import logging from apscheduler.schedulers.asyncio import AsyncIOScheduler from apscheduler.triggers.cron import CronTriggerlogging.basicConfig(levellogging.INFO) logger logging.getLogger(__name__)class Schedul…...
[GESP202503 C++六级题解]:P11962:树上漫步
[GESP202503 C++六级题解]:P11962:树上漫步 题目描述 小 A 有一棵 n n n 个结点的树,这些结点依次以 1 , 2 , ⋯ , n 1,2,\cdots,n 1,2,⋯,n 标号。 小 A 想在这棵树上漫步。具体来说,小 A 会从树上的某个结点出发,每⼀步可以移动到与当前结点相邻的结点,并且小 A…...
JavaScript基础-常见网页特效案例
在现代Web开发中,JavaScript不仅是处理业务逻辑的核心工具,也是实现丰富交互体验的关键。通过JavaScript,我们可以轻松地为网页添加各种动态效果和交互特性,从而提升用户体验。本文将介绍几种常见的网页特效案例,并提供…...
数据结构4
day4 5.队列 Queue 5.1 特性 队列是只允许再两端进行插入和删除操作的线性表,在队尾插入,在队头删除,插入的一段被称为“队尾”,删除的一端被称为“队头”。队列包括循环队列(顺序队列)、链式队列。结构:先进先出&…...
Rust 为什么不适合开发 GUI
前言 在当今科技蓬勃发展的时代,Rust 编程语言正崭露头角,逐步为世界上诸多重要基础设施提供动力支持。从存储海量信息到应用于 Linux 内核,Rust 展现出强大的实力。然而,当涉及构建 GUI(图形用户界面)时&…...
DisplayPort版本对比
目前视频接口标准基本上被HDMI和DisplayPort两大标准给瓜分天下了。 (1) HDMI由消费电子厂商主导,最新版本(如HDMI 2.1)理论带宽为48Gbps,主要应用于电视、游戏主机及家庭影音设备。 (2…...
YOLOv12即插即用-Pconv(风车卷积)
1.模块介绍 PinwheelConv(风车状卷积)充分利用了IRST(红外搜索与跟踪)中的高斯分布特性,以极少的参数实现了高效且更大感受野的特性。此外,本文还提出了一种简单而高效的 SD 损失函数,有效缓解了标签 IoU 变化带来的不稳定性。通过与现有卷积模块和损失函数的广泛对比,…...
AI知识补全(十四):零样本学习与少样本学习是什么?
名人说:一笑出门去,千里落花风。——辛弃疾《水调歌头我饮不须劝》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:AI知识补全(十三):注意力…...
Pycharm(十一):字符串练习题
1.输入一个字符串,打印所有偶数位上的字符(下标是0,2,4,6...位上的字符) # 练习题1:输入一个字符串,打印所有偶数位上的字符(下标是0,2,4,6...位上的字符) # 1.键盘录入字符串&…...
设计原则之迪米特法则
一、定义 迪米特法则又称为最少知识原则(Law of Demeter,LoD),是一项用于面向对象设计的基本原则之一。该原则强调一个对象应该对其他对象有最少的了解,即一个类不应该知道太多关于其他类的内部细节。 二、好处 迪米…...
Debian系统_主板四个网口1个配置为WAN,3个配置为LAN
Debian系统_主板四个网口1个配置为WAN,3个配置为LAN 一、重新配置网口 1、查看当前网口的状态 ifconfig 或者 ip link show 或者 ls /sys/class/net 2、修改网络配置文件 sudo vi /etc/network/interfaces 注意WAN口的网关地址如果是192.168.3.1的话,L…...
Spring Boot 快速入手
前言:为什么选择 Spring Boot? 🚀 在现代 Java 开发中,Spring Boot 已成为最流行的后端框架之一。无论是小型 Web 应用、企业级系统,还是微服务架构,Spring Boot 都能提供快速开发、自动配置、轻量级部署的…...
Ubuntu Live USB 如何使用
以下是使用 Ubuntu Live USB 的详细指南,涵盖启动、试用系统、安装系统及常用工具操作: 1. 制作 Ubuntu Live USB • 所需工具: • Ubuntu ISO 镜像(从 官网 下载)。 • U盘(至少 4GB,数据将被…...
基于单片机的音乐播放器系统设计
基于单片机的音乐播放器系统设计是一个综合性较强的电子系统开发项目 系统概述 基于单片机的音乐播放器旨在利用单片机的控制功能,结合音频处理电路、存储单元等,实现音乐的播放、暂停、切换、音量调节等功能,可应用于小型便携式音频设备、电子玩具、智能家居背景音乐系统等…...
HttpClient-01.介绍
一.介绍 通过HttpClient,我们可以在Java程序中构造并发送Http请求。要使用HttpClient,就要导入依赖坐标。 核心API: HttpClient:Http客户端,使用它可以发送http请求。 HttpClients:构建器,使…...
2025年win10使用dockerdesktop安装k8s
一、写作背景 百度了一圈, 要么教程老,很多操作步骤冗余, 要么跑不通,或者提供的链接失效等情况。 二、看前须知 1、安装过程使用的AI辅助, 因为参考的部分博客卡柱了。 2、如果操作过程中遇到卡顿, …...
技术回顾day2
1.获取文件列表 流程:前端根据查询条件封装查询信息,后端接收后进行封装,封装为FileInfoQuery,根据fileInfoQuery使用mybatis的动态sql来进行查询。 2.文件分片上传 每次上传需要上传包括(文件名字,文件,md5值&#…...
软件工程-UML
例图,类图,状态图,顺序图,活动图 目录 例图 类图 状态图 顺序图 活动图 例图 例图由四个元素组成,参与者、用例、系统边界、参与者和用例之间的关系 参与者用一个小人表示,用例用椭圆表示ÿ…...
赛逸展2025“创新引擎”启动:限量席位,点亮科技绿色新征程
当今时代,科技革新与绿色发展已然成为推动社会进步的双引擎。2025第七届亚洲消费电子技术贸易展(赛逸展)敏锐捕捉这一趋势,重磅打造“科技创新专区”,并面向科技、绿色企业吹响限量招募号角。 这个独具特色的专区紧扣…...
前后台系统
前后台系统(Foreground/Background System)是一种常见的嵌入式系统编程模型,尤其是在那些不需要复杂操作系统的简单系统中。这种系统架构通常用于实时性要求不是极端苛刻的环境,但在响应外部事件时仍需要一定的及时性。下面我将详…...
VHT AMPDU
A - MPDU 由一个或多个 A - MPDU 子帧以及可变数量的 EOF填充子帧组成。 在 VHT中,存在如下填充: 一个 A - MPDU 子帧的填充子字段中有 0 - 3 个字节。 EOF 填充字段中有零个或多个 EOF 填充子帧。 EOF 填充子帧中EOF填充字节中有 0 - 3 个字节。 A - MPDU 帧结束前填充(A -…...
Spring框架如何做EhCache缓存?
在Spring框架中,缓存是一种常见的优化手段,用于减少对数据库或其他资源的访问次数,从而提高应用性能。Spring提供了强大的缓存抽象,支持多种缓存实现(如EhCache、Redis、Caffeine等),并可以通过…...
助力 Windows 文件管理:重命名与清理重复文件软件精选
软件介绍 在日常的电脑使用中,高效管理文件至关重要。接下来为大家介绍几款实用软件,能助您轻松搞定文件管理难题。 AdvancedRenamer:全能批量重命名利器 专为 Windows 系统打造的 AdvancedRenamer,功能堪称强大。无论是文本替…...
重建二叉树(C++)
目录 1 问题描述 1.1 示例1 1.2 示例2 1.3 示例3 2 解题思路 3 代码实现 4 代码解析 4.1 初始化 4.2 递归部分 4.3 主逻辑 5 总结 1 问题描述 给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。 例如输入前序遍历序…...
Go+Gin实现安全多文件上传:带MD5校验的完整解决方案
后端 package mainimport ("encoding/json""fmt""log""net/http""os""path/filepath""github.com/gin-contrib/cors""github.com/gin-gonic/gin" )// 前端传来的文件元数据 type FileMetaRe…...
SwanLab Slack通知插件:让AI训练状态同步更及时
在AI模型训练的过程中,开发者常常面临一个难题:如何及时跟踪训练状态?无论是实验超参数的调整、关键指标的变化,还是意外中断的告警,传统的监控方式往往依赖手动刷新日志或反复检查终端,这不仅效率低下&…...
JavaScript元素尺寸与位置
目录 client 家族与 offset 家族 一、client 家族:内容区域 内边距 示例代码 应用场景 二、offset 家族:内容区域 内边距 边框 滚动条 示例代码 应用场景 三、综合应用场景 1. 动态调整元素高度 2. 拖拽元素 3. 判断元素是否在视口内 四…...
IS-IS:单区域集成配置与多区域集成配置
一、IS-IS概述 IS-IS(Intermediate System to Intermediate System) 是一种链路状态内部网关协议(IGP),设计用于自治系统(AS)内部的路由选择。最初由ISO为OSI模型的无连接网络服务(…...
Cesium学习(未完继续)
添加底图 viewer.imageryLayers.addImageryProvider(imageryProvider)常见 ImageryProvider 实现类 ArcGisMapServerImageryProvider:用于从 ArcGIS Server 获取影像数据。 BingMapsImageryProvider:用于从 Bing Maps 获取影像数据。 OpenStreetMapIm…...
【学Rust写CAD】22 双圆径向渐变的结构体(two_circle_radial_gradient.rs)
源码 //two_circle_radial_gradient.rs //! 定义双圆径向渐变的结构体和相关功能/// 表示一个双圆径向渐变的源 /// /// 该结构体描述了两个圆之间的渐变,支持矩阵变换和颜色查找表优化 #[derive(Debug, Clone, PartialEq)] pub struct TwoCircleRadialGradientSou…...