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

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

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

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

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

锁机制-锁的作用

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

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

锁机制-锁的分类

锁的分类并不是唯一的。

并发策略区分

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

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

资源访问权限

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

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

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

公平性区分

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

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

线程调度

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

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

作用范围

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

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

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

可重入性区分

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

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

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

相关推荐
一叶飘零_sweeeet2 小时前
吃透 Spring 体系结构
java·spring
胡楚昊2 小时前
NSSCTF动调题包通关
开发语言·javascript·算法
2401_837088502 小时前
简要总结 HashSet 和 HashMap(Java)
java·开发语言
毕设源码-钟学长2 小时前
【开题答辩全过程】以 基于Java的家政服务管理系统的设计与实现为例,包含答辩的问题和答案
java·开发语言
小白学大数据2 小时前
Java 爬虫对百科词条分类信息的抓取与处理
java·开发语言·爬虫
zmzb01033 小时前
C++课后习题训练记录Day56
开发语言·c++
编程小Y3 小时前
C++ Insights
开发语言·c++
小c君tt3 小时前
QT中想在QTextEdit控件中使用Qslog日志输出出现问题原因及解决方法
开发语言·qt
Coder_Boy_3 小时前
Spring 核心思想与企业级最佳特性(实践级)事务相关
java·数据库·spring