多线程的锁策略

文章目录

  • 前言
  • 一.乐观锁与悲观锁
  • 二.轻量级锁和重量锁
  • 三.自旋锁和挂起等待锁
  • 四.互斥锁和读写锁
  • 五.不可重入锁和可重入锁
  • 六.公平锁和非公平锁


前言

其实这里指的锁策略,不只只是线程才存在的。也不只是针对Java的,我现在就即将介绍常见的锁策略。

一.乐观锁与悲观锁

乐观锁:预测接下来的事情的冲突概率不大
悲观锁:预测接下来的事情冲突概率很大
这里说俩个概念,可能很抽象。但我们拿我们大学的期末考试举例子,明天要考试了,你丝毫对成绩不在乎能过就行,你的室友通宵复习,在思考接下来发生的种种事情,觉得自己会挂科,会重修,然后就焦虑焦虑焦虑,这里面充当的角色(你)是乐观锁,你的室友是悲观锁。
这里俩个锁的通常来说,悲观锁做的事情要多一点,效率低,乐观锁做的事情要少一些,效率低。

如果说没有理解到乐观锁与悲观锁的例子,那我画一个图大家理解一下
在这里插入图片描述

二.轻量级锁和重量锁

轻量级锁加锁解锁过程更高效
重量级锁,加锁解锁更慢,更低效
当然乐观锁也可能是一个轻量级锁
一个悲观锁也可能是一个重量级锁

三.自旋锁和挂起等待锁

自旋锁是轻量级锁一种经典的一个实现
挂起等待锁是重量级锁一种经典的一个实现

我先来说说什么是自旋锁
就拿我追女神来说,我舔女神,女神给我发好人卡,这就是加锁失败了。但如果我每天锲而不舍的去,向女生问候早安,午安,晚。突然有一天,女生跟他现在的男朋友分手了,此时我的机会不就来了,趁机上位。
这个情况就是,我尝试不断加锁,如果锁突然释放,我就会第一时间拿到锁.但这里有个弊端,就是我得整天围着她转,什么也干,这就是CPU的忙等。消耗资源。

什么是挂起等待锁呢?
我追女神追不到,我就先不搭理女神了,去干其他的事情,突然有一天女神想起我了,她主动来找我,那我高兴坏了,这个时候我的机会就来了。
换言之如果锁被释放,不会第一时间拿到锁,这时候等待的过程中有空闲时间,我可以干别的事情。

四.互斥锁和读写锁

怎么说呢?sychronize就是互斥锁,互斥锁只是单纯的加锁和解锁操作罢了。
读写锁才是重点
读写锁,简而言之,就是把读和写这两种加锁分开。另外他有一种特殊的场景,多线程同时对一个数据的访问和修改。

读写锁的过程:
1给读加锁
2给写加锁
3解锁
读写锁的约定:
1.读锁和解锁之间,不会存在锁竞争
2.写锁和写锁之间,有锁竞争
3.读锁和写锁之间有锁竞争
下面是一个例子:
在这里插入图片描述

五.不可重入锁和可重入锁

大概就是一个锁,在一个线程中连续加锁俩次不死锁,叫可重入锁,如果死锁了,叫不可重入锁。

这个我们还是来举一个例子
在这里插入图片描述

六.公平锁和非公平锁

此处对于公平与不公平的定义就是是不是遵循先来后到原则。
遵循的是公平锁
不遵循的是非公平锁
在这里插入图片描述

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

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

相关文章

Python 自动化指南(繁琐工作自动化)第二版:八、输入验证

原文:https://automatetheboringstuff.com/2e/chapter8/ 输入验证代码检查用户输入的值,比如来自input()函数的文本,格式是否正确。例如,如果您希望用户输入他们的年龄,您的代码不应该接受无意义的答案,如负…

中间表示- 三地址码

使用三地址码的编译器结构 三地址码的基本思想 (1)给每个中间变量和计算结果命名,没有复合表达式 (2)只有最基本的控制流,没有各种控制结构(if、do、while、for等等),只…

2 新建工程步骤

2 新建工程步骤 0.建立工程文件夹 选择一个程序储存文件,新建一个2-1 STM32工程模板文件夹,在2-1 STM32工程模板文件夹新建一个Start,User,Library文件夹 1.Keil中新建工程,选择型号 打开keil5,project->new pr…

045:cesium加载OpenStreetMap地图

第045个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载加载OpenStreetMap地图。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 注意OpenStreetMap国内加载有问题,需要曲线救图。 文章目录 示例效果配置方式示例源代码(共79行)相关API参考:…

询问ChatGPT的高质量答案艺术——提示工程指南(更新中……)

目录前言一、提示工程简介二、提示技巧2-1、生成法律文件2-2、添加提示技巧三、角色扮演3-1、智能手机产品描述3-2、添加角色扮演四、标准提示4-1、写一篇有关于新智能手机的评论4-2、添加标准提示、角色提示、种子词提示等等五、示例很少、或者没有示例5-1、生成一个手机配置六…

什么是服务架构?微服务架构的优势又是什么?

文章目录1.1 单体架构1.2 微服务架构1.3 单体架构和微服务架构的区分1.4 两种服务架构的优劣点1.4.1 单体架构1.4.2 微服务架构1.5 总结1.1 单体架构 单体架构(Monolithic Architecture)是一种传统的应用程序架构模式,它指的是将一个应用程序…

聚会Party

前言 加油 原文 聚会常用会话 ❶ He spun his partner quickly. 他令他的舞伴快速旋转起来。 ❷ She danced without music. 她跳了没有伴乐的舞蹈。 ❸ The attendants of the ball are very polite. 舞会的服务员非常有礼貌。 ❶ Happy birthday to you! 祝你生日快乐!…

剪枝与重参第四课:NVIDIA的2:4剪枝方案

目录NVIDIA的2:4 pattern稀疏方案前言1.稀疏性的研究现状2.图解nvidia2-4稀疏方案3.训练策略4.手写复现4.1 大体框架4.2 ASP类的实现4.3 mask的实现4.4 模型初始化4.5 Layer嵌入稀疏特性4.6 优化器初始化4.7 拓展-dynamic function assignment4.8 完整示例代码总结NVIDIA的2:4 …

做了个springboot接口参数解密的工具,我给它命名为万能钥匙(已上传maven中央仓库,附详细使用说明)

前言:之前工作中做过两个功能,就是之前写的这两篇博客,最近几天有个想法,给它做成一个springboot的start启动器,直接引入依赖,写好配置就能用了 springboot使用自定义注解实现接口参数解密,普通…

4.5--计算机网络之基础篇--1.模型分层--(复习+深入)---好好沉淀,加油呀

1.TCP/IP模型的分层 1.1.为什么要有 TCP/IP 网络模型? 对于同一台设备上的进程间通信,有很多种方式,比如有管道、消息队列、共享内存、信号等方式; 而对于不同设备上的进程间通信,就需要网络通信,而设备是…

Elasticsearch:索引状态是红色还是黄色?为什么?

在我之前文章 “Elasticsearch:如何调试集群状态 - 定位错误信息” 中,我有详细介绍如何调试集群状态。在今天的文章中,我将详细介绍如何故障排除和修复索引状态。 Elasticsearch 是一个伟大而强大的系统,特别是创建一个可扩展性极…

51单片机-LED篇

目录准备工作点亮一个LED灯写程序烧录LED闪烁延时代码Delay500ms烧录LED流水灯代码对LED流水灯代码进行优化,增加复用性延时代码代码准备工作 使用到的单片机是普中51单片机 使用到的软件是Keil uVision5和stc-isp 点亮一个LED灯 写程序 首先通过Keil uVision5…

多个硬盘挂载到同一个目录

同一目录无法重复挂载,后挂载的会覆盖之前挂载的磁盘。但是现在需要将4块磁盘并行挂载,该如何操作呢? 将2块磁盘合并到一个逻辑卷 进行挂载。 基本知识 基本概念PV(Physical Volume)- 物理卷物理卷在逻辑卷管理中处于最底层,它可…

MyBatisPlus-DML编程控制

MyBatisPlus-DML编程控制4,DML编程控制4.1 id生成策略控制知识点1:TableId4.1.1 环境构建4.1.2 代码演示AUTO策略步骤1:设置生成策略为AUTO步骤2:删除测试数据并修改自增值步骤3:运行新增方法INPUT策略步骤1:设置生成策略为INPUT步骤2:添加数据手动设置I…

Muduo库源码剖析(八)——TcpServer类

TcpServer类 要点 TcpServer类的主要作用是,管理整个服务器,做如下的一些操作: 管理accept(2) 获得的 TcpConnectionTcpServer是供用户直接使用的,生命期由用户控制设置 mainLoop,并利用 mainLoop 进行新连接的管理初始化TcpSe…

腾讯云轻量应用服务器价格表(2023版)

2023腾讯云轻量应用服务器2核2G4M带宽88元一年、2核4G6M带宽159元/年、4核8G10M优惠价425元、8核16G14M价格1249、16核32G20M服务器2499元一年,今天分享2023腾讯云服务器配置及精准报价。 腾讯云轻量应用服务器优惠价格表 腾讯云服务器分为轻量应用服务器和云服务器…

前端学习:HTML基本标签

目录 一、标题标签 二、段落标签 三、网址链接标签 四、HTML图像标签 五、HTML注释标签 六、HTML声明 七、换行标签 八、 HTML水平线标签 九、粗体文本标签 HTML5规范声明: 一、标题标签 HTML标题&#xff08;heading&#xff09;是通过<h1>、<h2>....<…

cgroups是linux内核中限制、记录、隔离进程组(process groups)所使用的物理资源的机制

容器虚拟化 可以实现应用程序的隔离 直接使用物理机的操作系统可以快速响应用户请求 不占用部署时间 占用少量磁盘空间 缺点∶学习成本增加、操作控制麻烦、网络控制与主机虚拟化有所区别、服务治理难。 微服务架构师需要会多门编程语言&#xff0c;才能治理各种服务 三种…

【ChatGPT】ChatGPT 能否取代程序员?

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 前言: ChatGPT 的优势 自然语言的生成 文本自动生成 建立了更人性化的人机交互 ChatGPT 的局限性 算法的解释能力较差 程序的可实现性较差 缺乏优化和质量控制 程序员相较于 …

对象的比较(数据结构系列12)

目录 前言&#xff1a; 1.PriorityQueue 1.1PriorityQueue的特性 1.2PriorityQueue的构造器 1.3大根堆的创建 1.4PriorityQueue中函数的说明 2.java中对象的比较 2.1基本类型的比较 2.2对象的比较 2.2.1覆写基类的equals 2.2.2基于Comparable接口类的比较 2.2.3基于…
最新文章