当前位置: 首页 > news >正文

锁策略--

文章目录

    • 乐观锁和悲观锁
    • 轻量锁和重量锁
    • 自旋锁和挂起等待锁
    • 读写锁和互斥锁
    • 可重入锁和不可重入锁
    • 公平锁和非公平锁

乐观锁和悲观锁

乐观锁在执行任务前预期竞争不激烈,就先不添加锁等到了发生了真实的锁竞争再进行锁竞争
乐观锁适用于锁竞争不激烈的情况下

悲观锁在执行任务前预期竞争激烈,直接添加锁再执行任务
悲观锁适用于锁竞争激烈的情况下
在这里插入图片描述

轻量锁和重量锁

轻量级锁:加锁过程比较简单,用到的资源比较少,用户态的操作(java层面就可以完成加锁)
重量级锁:加锁过程比较复杂,用到的资源比较多,典型的是内核态的一些操作
在这里插入图片描述
JVM 会根据实际的运行情况,自动选择合适的锁类型。 开发者不需要手动指定使用哪种锁。 但是,了解轻量级锁和重量级锁的原理,可以帮助我们更好地理解 synchronized 的性能特点,并编写更高效的并发代码。

自旋锁和挂起等待锁

自旋锁:不停地检查锁是否被释放,一旦被释放就直接获取锁资源
挂起等待锁:阻塞等待,等待被唤醒
在这里插入图片描述

读写锁和互斥锁

读写锁分为读锁和写锁
读操作时加读锁(共享锁),同时加锁互不影响,多个锁可以共存
写操作时加写锁(排他锁),不能同时加锁,只允许一个写锁执行任务

读锁与读锁可以共存
读锁与写锁不可以共存
写锁与写锁不可以共存

互斥锁是一种最基本的锁机制,在任何情况下保证只有一个线程可以持有锁,并访问被保护的共享资源,其他线程必须保证锁释放后才能去竞争锁
在这里插入图片描述

可重入锁和不可重入锁

可重入锁:对一把锁连续加锁(连续加锁也需要连续解锁)不形成死锁 可重入锁是指,当一个线程已经获取了某个锁之后,可以再次获取同一个锁,而不会被阻塞。 也就是说,同一个线程可以多次进入被该锁保护的同步代码块。

不可重入锁是指,当一个线程已经获取了某个锁之后,如果再次尝试获取同一个锁,则会被阻塞,即使该锁的持有者是当前线程。
在这里插入图片描述

公平锁和非公平锁

公平锁:当两个线程竞争锁时先要求锁的线程获得锁
非公平锁:允许线程在获取锁时不遵循请求顺序。也就是说,如果一个线程在锁可用时,它可以直接获取锁,而不必等待其他线程释放锁。这种策略可能导致某些线程长时间得不到锁(饥饿现象)。
在这里插入图片描述

相关文章:

  • 【Unity网络编程知识】FTP学习
  • JavaScript基础-常见网页特效案例
  • 【Linux】进程通信
  • NVIDIA Jetson Orin Nano 8G 开发板开箱测评:边缘AI设备的性价比之选
  • 【Easylive】saveVideoInfo 方法详细解析
  • 大模型专题10 —LangGraph高级教程:构建支持网页搜索+人工干预的可追溯对话系统
  • ELK 通过 logstash 收集单个/多个日志文件
  • GaussDB(for PostgreSQL) 存储引擎:ASTORE 与 USTORE 详细对比
  • KTransformer:国产高性能大模型加载工具使用指南
  • WindowsPE文件格式入门04.导入表
  • Spring基础一(IoC、Spring配置)
  • Oracle数据库数据编程SQL<3.7 PL/SQL 触发器(Trigger)>
  • Modbus TCP转profibusDP网关接防撞雷达快速配置
  • 【TVM教程】使用 TVMC Micro 执行微模型
  • [C++]C++11(上)
  • 基于 SpringBoot 的旧物置换网站
  • 域渗透-域环境操作与组策略
  • 飞桨深度学习平台:技术架构、产业实践与生态全景解析
  • 【软件】在Windows和Ubuntu上使用TFTP和NFS
  • 视频设备轨迹回放平台EasyCVR渡口码头智能监控系统方案,确保港口安全稳定运行
  • 广西壮族自治区党委常委会:坚决拥护党中央对蓝天立进行审查调查的决定
  • 一种声音·阿甘本|即将到来的中世纪;“新”与“旧”……
  • 南昌上饶领导干部任前公示:2人拟提名为县(市、区)长候选人
  • 媒体评欧阳娜娜遭民进党当局威胁:艺人表达国家认同是民族大义
  • 丹麦外交大臣拉斯穆森将访华
  • 新闻1+1丨城市,如何对青年更友好?