并发编程的锁有哪些?怎么分类?

文章目录

  • 一、按【实现方式】分类
    • 1. synchronized(JVM内置锁)
    • 2. lock(JUC显示锁)
  • 二、按【线程是否阻塞】分类
    • 1. 阻塞锁
    • 2. 自旋锁
  • 三、 按【是否公平】划分
  • 1. 公平锁
    • 2. 非公平锁
  • 四、按【锁的重入性】划分
    • 1. 可重入锁
    • 2. 不可重入锁
  • 五、 按【锁的作用范围】划分
    • 1. 独占锁(写锁)
    • 2. 共享锁(读锁)
  • 六、按【底层实现思想】划分
    • 1. 乐观锁
    • 2. 悲观锁

一、按【实现方式】分类

1. synchronized(JVM内置锁)

JVM级别的锁
特点:

  1. 关键字
  2. 自动加锁、自动释放锁
  3. 锁的是对象或者类
  4. 可重入
    用法:
synchronized(this){}publicsynchronizedvoidmethod(){}publicstaticsynchronizedvoidstaticMethod(){}

锁升级过程:

无锁 → 偏向锁 → 轻量级锁 → 重量级锁

优点:

  1. 简单
  2. JVM深度优化
  3. 不容易出错

缺点:

  1. 不够灵活
  2. 不能中断
  3. 不能尝试获取

2. lock(JUC显示锁)

代表:ReentrantLock

Locklock=newReentrantLock();lock.lock();try{// 临界区}finally{lock.unlock();}

特点

  • 必须手动释放锁
  • 支持:
    • 可终端锁
    • 尝试锁(tryLock)
    • 公平锁
    • 条件变量

适用场景

  • 高并发
  • 复杂业务
  • 许哟啊精细控制锁的行为

二、按【线程是否阻塞】分类

1. 阻塞锁

拿不到锁就坐等

  • synchronized
  • ReentrantLock.lock()
    优点
  • 逻辑简单
  • 对CPU友好
    缺点
  • 线程切换成本高

2. 自旋锁

拿不到锁就原地打转

  • 常见于CAS(底层实现)
  • AtomicInteger
  • JVM内部的轻量级锁
    优点:
  • 避免线程切换
  • 适合锁时间极短的场景
    缺点
  • 占用CPU

三、 按【是否公平】划分

1. 公平锁

先到先得,排队买票

newReentrantLock(true);

特点

  • 线程按申请顺序获得锁
  • 吞吐量较低
    适合场景
  • 业务对公平性要求
  • 避免线程饥饿

2. 非公平锁

允许插队,效率优先

newReentrantLock();

特点

  • 吞吐量高
  • 可能导致个别线程等待时间长

四、按【锁的重入性】划分

1. 可重入锁

**同一线程可反复进入

  • synchronized
  • ReentrantLock
synchronizedvoida(){b();}synchronizedvoidb(){}

意义

  • 防止自己把自己锁死
  • java锁的默认能力

2. 不可重入锁

进入一次就够,再来就死锁

  • Java中几乎不用
  • 理论概念,面试用

五、 按【锁的作用范围】划分

1. 独占锁(写锁)

**一次只允许一个线程

  • synchronized
  • ReentrantLock
  • ReentrantReadWriteLock.WriteLock

2. 共享锁(读锁)

多个线程可以同时持有

  • ReentrantReadWriteLock.ReadLock
ReadWriteLockrw=newReentrantReadWriteLock();rw.readLock().lock();// 共享rw.writeLock().lock();// 独占

适合场景

  • 读多写少
  • 缓存、配置读取

六、按【底层实现思想】划分

1. 乐观锁

不加锁,靠冲突检测

  • CAS
  • Atomic*
  • LongAdder
atomic.compareAndSet(old,new);

2. 悲观锁

先锁再说,防一切

  • synchronized
  • ReentrantLock

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

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

相关文章

2025/12/13

2025/12/13考六级

打开软件出现找不到vcruntime140.dll文件 无法运行的情况 下载修复解决

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

当AI开始“说人话“:微软VibeVoice如何让机器300毫秒内开口

你有没有想过,为什么Siri、小爱同学们总要"思考"一会儿才开口?而人类对话时,几乎是无缝衔接的。今天,我们要聊的这个项目,正在改变这一切。 一、从"哑巴AI"到"话痨机器人"的进化史 还记…

事务操作流程

1.开启事务:明确事物的起始点(begin或者start transaction)2.执行操作:执行SQL语句3.判断结果:若操作都执行成功,提交事务,修改生成若任意操作失败,回滚事务,撤销所有已经…

燕麦矮砧密植:水肥一体化系统的铺设要点

燕麦地里,老刘的燕麦长势整齐,穗大粒饱。"这套水肥系统真是帮了大忙,"他指着田间的滴灌设备说,"不仅省水省肥,产量还提高了三成。"认识燕麦矮砧密植燕麦矮砧密植,简单来说就是选用矮秆…

打开软件出现找不到vcruntime140_clr0400.dll文件 无法运行的问题 下载修复解决

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

字符串(String)是编程语言中一种非常基础且重要的数据类型

下面内容摘录自《用R探索医药数据科学》专栏文章的部分内容&#xff08;原文5050字&#xff09;。 2篇2章12节&#xff1a;R语言中字符串的处理&#xff0c;正则表达式的基础要点和特殊字符_r语言invalid multibyte character in parser (<input>:-CSDN博客 在数据科学和…

紫薯矮砧密植:水肥一体化系统的铺设要点纪实

红薯地里&#xff0c;老刘的紫薯长势喜人&#xff0c;薯块饱满。"这套水肥系统让我的紫薯产量提高四成&#xff0c;"他指着地里的滴灌设备说&#xff0c;"不仅省水省肥&#xff0c;紫薯品质还特别好。"认识紫薯矮砧密植紫薯矮砧密植&#xff0c;简单来说就…

贪吃蛇的java代码实现

实验六&#xff1a;贪吃蛇bodyObjpackage snake;import java.awt.*;public class bodyObj extends GameObj {public bodyObj(Image imd, int x, int y, GameWin frame) {super(imd, x, y, frame);}public void paintSelf(Graphics g) {super.paintSelf(g);} }FoodObjpackage sn…

随机抽奖算法实现与对比:聚焦洗牌算法(Fisher-Yates)

期末课程设计中&#xff0c;我和团队成员共同完成了 “随机抽奖算法实现与比较” 的课题。本次设计的核心目标是模拟实际抽奖场景&#xff0c;从指定号码范围&#xff08;min_num 到 max_num&#xff09;中抽取 k 个不重复的中奖号码&#xff0c;并通过实现四种不同算法&#x…

打开软件出现找不到vcruntime140d.dll文件的情况 下载修复解决

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

外卖订餐管理系统

实验五 外卖订餐管理系统 一、实验目的1.理解程序的基本概念——程序、变量、数据结构&#xff1b;2.学会使用顺序、选择、循环、跳转语句编写程序&#xff1b;3.学会使用数据和方法。二、实验内容开发一个外卖订餐系统&#xff0c;需要实现“我要订餐”、“查看餐袋”、“签收…

Level 2 → Level 3

用上一关获得的秘密ssh连接ssh -p 2220 bandit2@bandit.labs.overthewire.org使用ls,看到存在一个文件,使用cat ./--* 获得密码

软件缺少vbschs.dll文件 无法启动运行的情况 下载修复

在使用电脑系统时经常会出现丢失找不到某些文件的情况&#xff0c;由于很多常用软件都是采用 Microsoft Visual Studio 编写的&#xff0c;所以这类软件的运行需要依赖微软Visual C运行库&#xff0c;比如像 QQ、迅雷、Adobe 软件等等&#xff0c;如果没有安装VC运行库或者安装…

Flutter 混合开发实战:从 Add-to-App 到高性能双向通信的全栈集成方案

引言&#xff1a;为什么大厂都在用“混合开发”而非纯 Flutter&#xff1f;尽管 Flutter 具备跨平台能力&#xff0c;但在实际落地中&#xff0c;几乎没有任何大型 App 是 100% 纯 Flutter 构建的。原因显而易见&#xff1a;已有数百万行原生代码&#xff08;iOS/Android&#…

外设与接口:基于内核 gpio-keys 子系统的按键处理

1 基本原理 在 Linux 中&#xff0c;gpio-keys 是一个平台驱动&#xff08;Platform Driver&#xff09;&#xff0c;它充当了物理 GPIO 硬件与 Linux 标准输入子系统&#xff08;Input Subsystem&#xff09;之间的“翻译官”。 整个处理流程自下而上分为四层&#xff1a; 硬件…

sglang 大模型推理框架支持的EAGLE 1,2,3

文章目录EAGLE 系列模型的演进与核心机制关键参数与训练逻辑思考参考来源&#xff1a;https://docs.sglang.com.cn/backend/speculative_decoding.html https://github.com/SafeAILab/EAGLE EAGLE3 https://arxiv.org/pdf/2503.01840 EAGLE 系列模型的演进与核心机制 EAGLE 基…

延凡科技 EMS 智慧云平台:3 万起订阅,中小用能单位的 “云端全能源管家”

延凡科技 EMS 智慧云平台是专为工厂、园区、楼宇、医院等中小用能单位打造的云原生能源管理解决方案&#xff0c;聚焦 “降本节能、碳排合规、云端运维、数据驱动” 核心目标&#xff0c;采用 SaaS 订阅模式&#xff0c;整合物联网感知、云边协同、AI 能效优化算法&#xff0c;…

拦截器注册InterceptorRegistry 实现讲解

1.核心概念InterceptorRegistry 是 Spring MVC 提供的拦截器注册器&#xff0c;用于配置拦截器的拦截规则。2.主要方法addInterceptor(): 添加拦截器 addPathPatterns(): 指定要拦截的路径 excludePathPatterns(): 指定要排除的路径 路径匹配规则 /api/**: 匹配 /api/ 下的所有…

汇编语言全接触-27.工具提示控件

我们将学习工具提示控件:它是什么如何创建和使用.下载例子理论:工具提示是当鼠标在某特定区域上停留时显示的一个矩形窗口.工具提示窗口包含一些编程者想要显示的文本.在这点上,工具提示同状态栏的作用是一样的,所不同的是工具提示当单击或者远离指定区域的时候就会消逝,你可能…