JavaEE初阶多线程 (5)

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就会使代码的效率降低。

 

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

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

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

相关文章

web及网络基础图文详解

目录 1.1TCP/IP 协议族 1.2TCP/IP 的分层管理 1.3TCP/IP通信传输流 1.4 与 HTTP 关系密切的协议 : IP、TCP 和 DNS (1)负责传输的 IP协议(网络层) (2)确保可靠的 TCP协议(传输层&#xff…

2024/5/26周报

文章目录 摘要Abstract文献阅读题目创新点方法网络架构LSTM 实验过程Data acquisitionData preprocessingAlgorithm parameter settingsModels evaluation 实验结果 深度学习ARIMA一、ARIMA模型的基本思想二、ARIMA模型的数学表达式三、差分过程 总结 摘要 本周阅读了一篇基于…

Aya 23 是 Cohere For AI 推出的一款最先进的新型多语言开放重量模型

相信一些对LLM关注较高的同学们,应该对这家加拿大的Cohere不会太陌生。毕竟此前,它就开源过 Aya 101 和 Command R 这两款大模型。 Cohere 的非营利性研究实验室 Cohere for AI 发布了 Aya 23,这是其多语言大型语言模型 (llm&…

计算机毕业设计 | SpringBoot社区物业管理系统 小区管理(附源码)

1, 概述 1.1 课题背景 近几年来,随着物业相关的各种信息越来越多,比如报修维修、缴费、车位、访客等信息,对物业管理方面的需求越来越高,我们在工作中越来越多方面需要利用网页端管理系统来进行管理,我们…

就业班 第三阶段(ELK) 2401--5.20 day1 ELK 企业实战 ES+head+kibana+logstash部署(最大集群)

ELKkafkafilebeat企业内部日志分析系统 1、组件介绍 1、Elasticsearch: 是一个基于Lucene的搜索服务器。提供搜集、分析、存储数据三大功能。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的&#xff…

力扣HOT100 - 287. 寻找重复数

解题思路: 快慢指针 第一步,慢指针每次移动一步,快指针每次移动两步,直到它们相遇。这一步保证了它们在环中相遇。 接下来,将其中一个指针(快指针或慢指针)重置到起点(即数组的第一…

IP数据云确认参展2024 ChinaJoy BTOB与诸位共展未来!

作为在全球数字娱乐领域兼具知名度与影响力的年度盛会,2024年第二十一届ChinaJoy BTOB将于7月26日至7月28日在上海新国际博览中心盛大召开,秉承着初心“游”在,精彩无限!(英译:Stay True, Game On.&#xf…

数据库攻防之MySQL

MySQL 是最流行的关系型数据库,与此同时也是 web 应用中最好的关系型数据库管理应用软件。我们在渗透过程中碰到的 PHP 站点大部分都会搭配 MySQL 数据库,因此它是红队攻防中最常遇到的数据库。 0x01 MySQL简介 MySQL 是典型的关系型数据库,…

Gradle筑基——Gradle Maven仓库管理

基础概念: 1.POM pom:全名Project Object Model 项目对象模型,用来描述当前maven项目发布模块的基础信息 pom主要节点信息如下: 配置描述举例(com.android.tools.build:gradle:4.1.1)groupId组织 / 公司的名称com.…

Linux-之 简易:Shell编程

1 为什么要学习Shell编程 对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些Shel脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本. 对于大数据程序员来说,需要编写Shell程序来管理集群 2 Shell是什么 Shell是一个命令行解释器&#xff…

AIGC 005-Dreambooth定制化生成,微调文本到图像的扩散模型!

AIGC 005-Dreambooth定制化生成,微调文本到图像的扩散模型! 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 DreamBooth 论文 (DreamBooth: Fine-Tuning Text-to-Image Diffusion Models for Subject-Driven Generation) 提出了一种新颖的技术&#x…

AI视频教程下载:用提示工程在GPT商店构建10个GPTs

你将学到什么? 深入了解ChatGPT平台和GPT商店的生态系统。 开发为多样化应用定制GPT模型的专业知识。 掌握高效内容生成的AI自动化技术。 学习高级提示工程以优化ChatGPT输出。 获取构建AI驱动的数字营销和广告解决方案的技能。 了解如何为SEO写作和优化创建专…

iOS--锁的学习

iOS--锁的学习 锁的介绍线程安全 锁的分类自旋锁和互斥锁OSSpinLockos_unfair_lockpthread_mutexpthread_mutex的属性 NSLockNSRecursiveLockNSConditionNSConditionLockdispatch_semaphoredispatch_queuesynchronizedatomicpthread_rwlock:读写锁dispatch_barrier_…

S1E45:单链表1 课后作业

测试题:0. 相比起数组来说,单链表具有哪些优势呢? 答:长度非固定,可以申请添加长度 答案:对于数组来说,随机插入或者删除其中间的某一个元素,都是需要大量的移动操作,而…

Vue.Draggable:强大的Vue拖放组件技术探索

一、引言 随着前端技术的不断发展,拖放(Drag-and-Drop)功能已经成为许多Web应用不可或缺的一部分。Vue.js作为现代前端框架的佼佼者,为开发者提供了丰富的生态系统和强大的工具链。Vue.Draggable作为基于Sortable.js的Vue拖放组件…

在二十三届中国科学家论坛大会上,郎百忠被授予《中国首席政治书法领域科学家》荣誉称号

在5月25日于北京举办的第二十三届中国科学家论坛上,备受瞩目的书法家郎百忠凭借其卓越的书法造诣和深厚的政治素养,荣获了"中国首席政治书法科学家"称号。这一荣誉是对郎百忠多年来在书法领域的杰出贡献以及他在政治书法领域的卓越成就的肯定。…

leedcode【19】. 删除链表的倒数第 N 个结点——Java解法

Problem: 19. 删除链表的倒数第 N 个结点 思路解题方法复杂度Code性能 思路 如果要删除倒数第n个节点,让fast移动n步,然后让fast和slow同时移动,直到fast指向链表末尾。删掉slow所指向的节点就可以了。 分为如下几步: 定义fast指…

AI重塑保险业未来:机器学习在风险评估、欺诈检测与客户服务中的深度应用

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

Adobe Bridge BR v14.0.3 安装教程 (多媒体文件组织管理工具)

Adobe系列软件安装目录 一、Adobe Photoshop PS 25.6.0 安装教程 (最流行的图像设计软件) 二、Adobe Media Encoder ME v24.3.0 安装教程 (视频和音频编码渲染工具) 三、Adobe Premiere Pro v24.3.0 安装教程 (领先的视频编辑软件) 四、Adobe After Effects AE v24.3.0 安装…

C/C++ vector详解

要想了解STL,就必须会看: cplusplus.comhttps://legacy.cplusplus.com/ 官方内容全都是英文的,可以参考: C/C初始识https://blog.csdn.net/2301_77087344/article/details/138596294?spm1001.2014.3001.5501 vector&#xff…