Java常见技术分享-12-多线程安全-锁机制

我觉得之前的学习都太散了, 这样记,实际上我们的对于多线程知识的记忆并不长久。 太碎片了。

那么如果我在每一个分享前 ,都先给上一个多线程知识点的思维导图。

当你遇到问题的时候, 可以先回想思维导图, 再按照具体模块 往下思考。 这样记忆我理解就更符合人类的脑子。 但是假如我直接丢一张完整的,详细的思维导图出来, 我想有一部分人会跟我一样, 直接跑, 一点看的想法都没有, 所以我接下来会根据知识板块的不同一点点补充知识树。 今天要讲的是锁机制, 这是 多线程安全的 最基础的知识。

只有了解了 锁机制, 后面讲什么样的场景, 用什么样的锁, 而这些锁 有哪些已经实现好的 工具类 可以用, 你才有一个基础的认知。

锁机制-锁的作用

锁的存在主要就是用来解决多线程或者多进程并发访问共享资源时的冲突问题。 保证共享资源 或者说 共享变量 的 一致性 和 完整性 。

省流: 解决多线程 并发 访问 共享资源 的 冲突问题。

锁机制-锁的分类

锁的分类并不是唯一的。

并发策略区分

悲观锁 觉得并发冲突的概率 高, 所以直接锁住资源, 像 synchronized.

乐观锁, 先假设不冲突, 用版本号 或者 CAS 来检测。

资源访问权限

互斥锁/独占锁/排他锁, 同一时间 只能有一个线程用。

共享锁, 同一时间 多个线程占用

例子读写锁 , 读多写少的场景 读共享, 写互斥 ,像ReadWriteLock.

公平性区分

公平锁 , 线程按照请求的顺序拿锁,。

非公平锁, 不按照顺序, 能插队, 性能好点。

线程调度

自旋锁, 线程不阻塞, 循环等锁释放。 占CPU, 但是没有线程切换的开销,适合锁占用的时间短。

阻塞锁, 拿不到锁就阻塞, 不占CPU。有线程切换的开销

作用范围

对象锁, 管在单个对象的实例

类锁, 管整个类的所有实例。

分布式锁, 管不同进程和机器间的资源竞争。

可重入性区分

可重入锁,一个线程获取锁之后, 能够再次进入同一把锁保护的同步代码块, 不会自己把自己锁死。

不可重入锁, 刚好相反, 在递归的场景 很容易自己锁自己, 造成死锁 。

下一篇会了解锁的底层实现原理 核心。

相关推荐
Chester_19995 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
EXI-小洲6 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员6 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导6 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan6 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
m0_695251497 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
2601_961901707 小时前
SpringBoot使用Nacos进行application.yml配置管理
java·spring boot·spring
何以解忧,唯有..8 小时前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain
大衛說8 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习
QQ_21696290968 小时前
【源码编号:project79475】SpringBoot校内二手交易平台:商品发布、分类检索、留言交流、订单管理全流程实战
java·spring boot·后端