JavaEE初阶多线程 (5)

news2024/11/19 9:34:40

1.锁的策略

1.1锁的策略是什么

这个锁的策略可以理解为,一种做法,相当于当你遇到锁竞争,加锁解锁,的情况你会怎么做。

乐观锁可以理解为疫情的时候比较乐观就买了最基本的物资, 买的时候非常方便

1.2乐观锁

当效率冲突比较低的时候就是乐观锁,这个锁就是乐观锁,资源占用率小

1.3悲观锁

当效率冲突较高的时候就是悲观锁,这个锁就是悲观锁,资源占用率高

1.4悲观锁和乐观锁的对比

 1.5轻量级锁

轻量级锁就是☞任务比较少,加锁的数量较少,可以大概理解为乐观锁

 1.6重量级锁

重量级锁就是☞任务比较多,加锁的数量比较少,可以理解为悲观锁

1.7轻量级锁和重量级锁的对比

1.8synconize锁

这个是Java包中的锁,他是比较只智能的任务少的时候就是乐观锁,任务多的时候就是悲观锁。

1.9自旋锁

一种轻量级锁的实现方式(典型)

类似于你追你女神结果女神有对象然后你一直每天骚扰,然后这时候女神分手了,这时候你就上位了,这时候就是自旋锁的感觉。

代码图片

1.10挂起等待锁

一种重量级锁的实现方式(典型)

类似于你追女神然后女神有对象,这时候你微信把女神拉黑,然后一直默默努力,然后这时候女神分手了,然后你再追求女神,这个中间空白的时间就是(挂起时间)

1.11可重入锁

synchronized就是一个可重入锁它可以一直不断的给一个对象进行加锁,不会发生死锁

1.12不可重入锁

在C++中std:mutex就是一个不可重入锁,针对一格线程加锁两次就会发生死锁。

1.13公平锁

严格按照先来后到的顺序来获取锁,哪个线程的等待时间长就是哪个线程获得锁

1.14非公平锁

各个线程各凭本事,谁拿到锁这个就是谁的。

其中synconize不是公平锁,他是系统随机调度的,要是想公平的化就要使用队列来实现线程的公平拿到锁。

1.15公平锁和非公平锁的相互功能对比

1.16互斥锁

互斥锁相当于拿到这个锁以后如果这个线程再出现一次这个锁就会报错,像synconize就是一个典型的互斥锁

1.17读写锁(JAVA api中读写锁来让我们用)

我画了一格逻辑图来让大家更好的了解到读写锁是什么东西

 2.synconize详细讲解

在上面讲了那么多的锁,我们一定好奇在java jdk包中提供的synconize是什么锁这里我就总结一下

synconize其实是一个自适应的锁

它加锁的状态是下面这一张图片

这个偏向锁相当一个标记,如果需要加锁他就会加锁,如果不需要加锁他就一直标记着知道这个线程结束。在下面的图中,升级的过程是不可逆的。未来JVM或许会出一个这样的功能

3.JVM处理锁

3.1synconize锁的优化

(synconize)在编译器中,JVM会自动来判断这个锁是否应该存在,如果需要加锁就保留不需要就直接消除。

 4.CAS流程

CAS是compare 和swap进行比较和交换的意思

这是CPU的原子命令

其中JVM把这个CPU的原子指令给封装所以我们可以用这个原子指令,来进行CAS的操作

这个不建议大家用容易出错

这里只是给大家讲解一下

我们还可以用这种封装的方法来替换运算符

其中这些被封装的方法是没有进行加锁的因为加锁的化就会占用CPU占用CPU就会使代码的效率降低。

 

这些方法只能在一些特定的场景下才能使用

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

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

相关文章

linux的用户管理

新建用户:1.useradd 2.passwd 完成的操作: (1)/etc/passwd添加一行 (2)/etc/shadow添加一行 (3)/etc/group添加一行 (4)创建用户家目录 (5)创建用户邮件文件 例:创建用户jerry,要求: uid:777&am…

Linux系统进程管理

系统进程管理 一、进程概述 1.1 什么是进程?进程管理需要做什么? 进程是已启动的运行实例,进程有以下组成部分: ​ 已分配内存的地址空间 ​ 进程ID ​ 程序的代码 ​ 进程状态 进程管理包括进程调度、中断处理、信号、进程…

基于 vuestic-ui 实战教程

1. 前言简介 Vuestic UI是一个基于开源Vue 3的UI框架。它是一个MIT许可的UI框架,提供了易于配置的现成前端组件,并加快了响应式和快速加载Web界面的开发。它最初于2021年5月由EpicMax发布,这就是今天的Vuestic UI。 官网地址请点击访问 体验…

半年不在csdn写博客,总结一下这半年的学习经历,coderfun的一些碎碎念.

前言 自从自己建站一来,就不在csdn写博客了,但是后来自己的网站因为资金问题不能继续维护下去,所以便放弃了自建博客网站来写博客,等到以后找到稳定,打算满意的工作再来做自己的博客网站。此篇博客用来记录自己在csdn…

SCI审稿结果也可能是剽窃的?Nature重锤:可能只是冰山一角

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 近期,Nature报道了华沙生命科学大学水文学家Mikołaj Piniewski和他的同事们,针对学术界同行评审报告剽窃的调查结果。该团队披露了数十起明显的同行评…

Android单元测试实践

一、基础概念 按照Google官方建议,Android测试体系应该参照测试金字塔架构(如下图所示),App应该包含三类测试(即小型、中型和大型测试)。 图片 小型测试是指单元测试,用于验证应用的行为,一次验证一个类。中型测试是指集成测试,用于验证模块内堆栈级别之间的交互或相…

CHI协议_1

作者:someone链接:https://www.zhihu.com/question/304259901/answer/3455648666来源。 1. AMBA CHI简介 一致性总线接口(CHI)是AXI一致性扩展(ACE)协议的演进。它是Arm的AMBA总线的一部分。AMBA是一种免…

【数据结构/C语言】深入理解 双向链表

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:数据结构与算法 在阅读本篇文章之前,您可能需要用到这篇关于单链表详细介绍的文章 【数据结构/C语言】深入理解 单链表…

博客开始使用 Cache Master 缓存插件

明月在给大家推荐 Cache Master 插件的时候(可参考【推荐个比较纯正的缓存插件——Cache Master】一文),仅仅是在其他站点上试用了一下,今天明月正式在博客上用上了 Cache Master,没有想到对 Dragon 主题的支持竟然是出…

5月26(信息差)

🌍 珠峰登顶“堵车”后冰架断裂 5人坠崖 2人没爬上来! 珠峰登顶“堵车”后冰架断裂 5人坠崖 2人没爬上来! 🎄 Windows 11 Beta 22635.3646 预览版发布:中国大陆地区新增“微软电脑管家”应用 ✨ 成都限购解除即将满…

2024年上半年软件系统架构师考试【回忆版】

文章目录 考试时间考试地点综合知识案例分析1、微服务架构的优点和缺点2、质量属性的6个要素3、分布式锁 Redis的缺点4、MongoDB 存储矢量图的优势 论文回忆版论文一、论单元测试的设计与应用论文二、论大数据模型的设计与应用论文三、论模型驱动的架构设计及应用论文四、论云原…

设计模式10——装饰模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用,主要是下面的UML图可以起到大作用,在你学习过一遍以后可能会遗忘,忘记了不要紧,只要看一眼UML图就能想起来了。同时也请大家多多指教。 装饰模式 是一种行为型模式。…

前端手写文件上传;使用input实现文件拖动上传

使用input实现文件拖动上传 vue2代码&#xff1a; <template><div><div class"drop-area" dragenter"highlight" dragover"highlight" dragleave"unhighlight" drop"handleDrop"click"handleClick&quo…

解决SpringBoot中插入汉字变成?(一秒解决)

在这里url后面加一行配置即可&useUnicodetrue&characterEncodingUTF-8即可 解释 spring.datasource.url: 这里包含了数据库的URL&#xff0c;以及额外的参数如useUnicodetrue用于启用Unicode字符集支持&#xff0c;characterEncodingUTF-8用于指定字符编码为UTF-8&…

【MinIO学习】

OSS Docker podman MinIO服务器 MinIO客户端 Bucket Object 时间同步 The difference between the request time and the servers time is too large。 URL

Linux防火墙之iptables(二)

一.SNAT策略概述 1.SNAT 策略的典型应用环境 局域网主机共享单个公网IP地址接入Internet&#xff08;私有IP不能在Internet中正常路由&#xff09; 局域共享上网 2.SNAT 策略的原理 源地址转换&#xff0c;Source Network Address Translation 修改数据包的源地址 未作SNAT转换…

搭建Harbor镜像仓库

前言 1、系统版本&#xff1a;CentOS9 2、harbor版本&#xff1a;v2.9.4 3、提前安装好docker和docker-compose&#xff0c;参考地址。我这里安装的版本是docker&#xff1a;26.1.3 docker-compose&#xff1a;v2.27.1 安装步骤 下载安装包 1、下载地址&#xff1a;ha…

基于yolov5和desnet的猫咪识别模型

前言 前段时间给学校的猫咪小程序搭建了识猫模型&#xff0c;可以通过猫咪的照片辨别出是那只猫猫&#xff0c;这里分享下具体的方案&#xff0c;先看效果图&#xff1a; 源代码在文末 模型训练 在训练服务器&#xff08;或你的个人PC&#xff09;上拉取本仓库代码。 图片数据…

moviepy入门

1. 简介 由于恶心的工作和没有规划的部门安排&#xff0c;我被排到了算法部门&#xff0c;从事和算法没有半毛钱关系的业务上&#xff0c;也就是。。。搞视频。咋说呢&#xff1f;视频这东西我没有一点基础&#xff0c;还好有前人写好的代码&#xff0c;用的是moviepy和ffmpeg…

网络攻防概述(基础概念)

文章目录 APTAPT概念APT攻击过程 网络空间与网络空间安全网络空间(Cyberspace)网络空间安全(Cyberspace Security) 网络安全属性机密性(Confidentiality或Security)完整性(Integrity)可用性&#xff08;Availability&#xff09;不可否认性&#xff08;Non-repudiation&#xf…