【锁】细数多线程中的十三种锁
目录
- 乐观锁/悲观锁
- 公平锁/非公平锁
- 可重入锁/不可重入锁
- 自旋锁
- 偏向锁/轻量级锁/重量级锁
- 独享锁/共享锁
- 分段锁
乐观锁/悲观锁
乐观锁:每次读数据的时候都认为别人不会修改,所以不上锁,只有在写的时候判断一下别人有没有修改过。
悲观锁:每次读数据的时候都认为别人会修改,所以都上锁,这样别人读数据需要阻塞等待拿到锁。
公平锁/非公平锁
公平锁:先等待的线程先获得锁。
非公平锁:随机唤醒线程。
tips:
可重入锁中:
ReentrantLock可通过构造方法指定生成公平锁或者非公平锁。
Synchronized为非公平锁。
可重入锁/不可重入锁
可重入锁:同一个线程,可以上两次锁就是可重入锁,其他线程想上锁进入阻塞状态。
不可重入锁:同一个线程只能上一次锁,若二次上锁则造成死锁。
自旋锁
自旋锁:尝试获取锁的线程不会立即阻塞,而是采用循环的方式尝试获取锁。
偏向锁/轻量级锁/重量级锁
锁的升级过程:无锁->偏向锁->轻量级锁->重量级锁
偏向锁:如果一段同步代码一直被一个线程访问,那该线程会自动获取锁。
轻量级锁:当锁是偏向锁时,被另一个线程访问,就会升级为轻量级锁,其他线程会通过自选的方式获取锁。
重量级锁:当锁是轻量级锁时,线程自旋一定次数仍未拿到锁,则进入阻塞状态,该锁升级为重量级锁。
独享锁/共享锁
独享锁:一次只能被一个线程持有,比如可重入锁。
共享锁:可被多个线程持有。比如读锁,并发读。
比如:ReentrantReadWriteLock
ReadWriteLock接口的实现,读锁共享,写锁独占。
读读不互斥,读写,写写互斥。
分段锁
分段加锁,根据hashcode确定分段,对该分段加锁。比如ConcurrentHashMap,实现并行插入。
【锁】细数多线程中的十三种锁相关推荐
- 《八股文》细数Java线程、并发、锁,温故而知新
<八股文>细数Java线程.并发.锁,温故而知新 基础 1. 并行.并发有什么区别? 2. 说说什么是进程和线程? 3. 说说线程有几种创建方式? 4. 为什么调用start()方法时会执 ...
- 24张图带你彻底理解Java中的21种锁
本篇主要内容如下: 本篇主要内容 本篇文章已收纳到我的Java在线文档. Github 我的SpringCloud实战项目持续更新中 帮你总结好的锁: 序号 锁名称 应用 1 乐观锁 CAS 2 悲观 ...
- java中怎么判断一段代码时线程安全还是非线程安全_24张图带你彻底理解Java中的21种锁...
(给ImportNew加星标,提高Java技能) 转自:悟空聊架 本篇主要内容如下: 本篇文章已收纳到我的 Java 在线文档. Github.我的 SpringCloud 实战项目持续更新中. 帮你 ...
- 多图带你彻底理解Java中的21种锁!
作者 | 悟空聊架构 来源 | 悟空聊架构(ID:PassJava666) 本篇主要内容如下: 本篇主要内容 本篇文章已收纳到我的Java在线文档. Github 我的SpringCloud实战项目持 ...
- Java中的21种锁
本篇主要内容如下: 本篇主要内容 本篇文章已收纳到我的Java在线文档. Github 我的SpringCloud实战项目持续更新中 帮你总结好的锁: 序号锁名称应用1乐观锁CAS2悲观锁synchr ...
- php反序列化java.long_细数java中Long与Integer比较容易犯的错误总结
今天使用findbugs扫描项目后发现很多高危漏洞,其中非常常见的一个是比较两个Long或Integer时直接使用的==来比较. 其实这样是错误的. 因为Long与Ineger都是包装类型,是对象. ...
- 合成实验中,十三种后处理方法:实验室常用13种后处理方法、故障及解决办法
合成实验中,十三种后处理方法:实验室常用13种后处理方法.故障及解决办法 1.有机酸碱性化合物的分离提纯 具有酸碱性基团的有机化合物,可以得失质子形成离子化合物,而离子化合物与原来的母体化合物具有不同 ...
- java中的几种锁(很详细)-小白收藏
最近学习java中的几种锁,看到比较详细的一篇,先转发,后续补充自己的见解 其实如果按照名称来说,锁大概有以下名词: 自旋锁 ,自旋锁的其他种类,阻塞锁,可重入锁 ,读写锁 ,互斥锁 ,悲观锁 ,乐 ...
- 细数T-BOX中TI的明星产品之 线性稳压器 | 第五节TPS7B7701-Q1:为车载应用保驾护航
汽车新热点:细数T-BOX中TI的明星产品(进行中) Interface PHY 第一节 DP83TC811S-Q1:车载以太网让您的T-BOX如虎添翼 CAN 第二节 TCAN1042- ...
最新文章
- Celery 应用:Application
- 做人,你想过这四个致命的问题吗
- 使用Json.NET来序列化所需的数据
- Qt Creator创建一个移动应用程序
- QPW 点评阅读日志表(tf_appraise_read_log)
- spring-boot两小时入门笔记
- 区块链,到底是美好未来还是题材炒作?
- @suppressWarnings解释
- 监控指标分类汇总归纳
- 当关闭winform窗体时触发
- 超像素分割算法SLIC的matlab实现
- 免费的固定资产管理软件|免费的固定资产管理软件哪个好?
- cad插入块_CAD图块全攻略:别羡慕我下班早,我的CAD软件会开挂
- 使用来自文件“***.snk”的公钥对输出签名时出错
- Qt程序无响应 原因总结
- linux c 操作word文档,C and Word and linux 总结.doc
- 网络安全用什么编程语言_网络安全的5种最佳编程语言
- 怎样进行https证书检查
- 集成电路(芯片 ic chip)详解
- ABP 多租户 对应多数据库 租户启动报错