论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
DevOps与敏捷开发
›
java中锁的分类
java中锁的分类
宁睿
论坛元老
|
2024-8-2 10:28:15
|
来自手机
|
显示全部楼层
|
阅读模式
楼主
主题
1085
|
帖子
1085
|
积分
3265
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
一、锁的整体分类
在java中锁被分成了4类,即:
1、可重入锁、不可重入锁
2、乐观锁、悲观锁
3、公平锁、非公平锁
4、共享锁、互斥锁
二、可重入锁、不可重入锁
1、可重入锁:当线程A已经拿到了锁S,当线程A再次场次获取锁S,线程A是可以获取
到锁S的;可重入锁拿到了几次,线程开释锁时就要开释同样次数的锁。
java中的synchronized、ReentrantLock、ReentrantReadWriteLock都是
可重入锁。
2、不可重入锁:当线程A已经拿到了锁S,当线程A再次场次获取锁S,线程A是不可以获取
到锁S的,由于锁S已经被占用;如 线程池 ThreadPoolExecutor 中的内部
类 Worker 就是一个不可重入锁,其获取锁的代码如下图所示:
三、乐观锁、悲观锁
1、乐观锁
获取不到锁资源时,可以让CPU调理再次实行获取锁资源(可以当作“自旋”,)
java中提供的CAS操作就是一种乐观锁的实现方式,他不涉及线程的挂起操作,
2、悲观锁
当获取不到锁资源时,会将当火线程挂起(即将当火线程设置为 BLOCKED
或 WAITING 状态);线程的挂起或涉及用户态和内核态之间的切换,而这种切换
黑白常消耗CPU资源的,所以应该尽量制止用户态与内核态之间的切换。
java中的synchronized、ReentrantLock、ReentrantReadWriteLock都是悲观锁
四、公平锁、非公平锁
1、公平锁
当线程A、B同时去竞争锁资源T,若A乐成拿到了锁T,线程B没有拿到锁T,线程B去
列队等待A开释锁资源;此时线程C进来了,锁T被A持有,同时线程B在列队,此时线程
C也必要去列队且C排到B后边。
2、非公平锁
当线程A、B同时去竞争锁资源T,若A乐成拿到了锁T,线程B没有拿到锁T,线程B去
列队等待A开释锁资源;此时线程C进来了,线程C先去实行竞争一下锁资源,若C竞争
到了锁T,则C持有锁资源,否则线程C必要去列队且C排到B后边。
java中的synchronized 一定黑白公平锁
java中的ReentrantLock、ReentrantReadWriteLock 可以是公平锁,也可以黑白公平锁。
五、共享锁、互斥锁
1、共享锁
同一时间点,可以有多个线程同时持有的锁称为共享锁
2、互斥锁
同一时间点,只有一个线程能持有的锁 称为互斥锁;
java中的synchronized、ReentrantLock 是互斥锁
java中的 ReentrantReadWriteLock有互斥锁也有共享锁,其中写锁是互斥锁,读锁是共享锁
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
宁睿
论坛元老
这个人很懒什么都没写!
楼主热帖
java前置学习
【RocketMQ】消息的存储
iOS Widget
简单的用Python对手机号进行加密 ...
【PostgreSQL】PostgreSQL重建与主库不 ...
k8s v-1.20版本部署详细过程[实测可用 ...
基于单片机的压力测控仿真设计(#0024) ...
❤️肝下25万字的《决战Linux到精通》 ...
Unity 将是驱动 C# 增长的引擎吗 ? ...
【iOS面试总结】疫情隔离中,线上面试 ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
MES
物联网
云原生
虚拟化与私有云
移动端开发
网络安全
快速回复
返回顶部
返回列表