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

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

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

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

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

锁机制-锁的作用

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

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

锁机制-锁的分类

锁的分类并不是唯一的。

并发策略区分

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

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

资源访问权限

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

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

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

公平性区分

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

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

线程调度

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

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

作用范围

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

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

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

可重入性区分

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

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

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

相关推荐
咩图15 分钟前
Sketchup软件二次开发+Ruby+VisualStudioCode
java·前端·ruby
moxiaoran575316 分钟前
Go语言的文件操作
开发语言·后端·golang
我命由我1234519 分钟前
Android 开发问题:Duplicate class android.support.v4.app.INotificationSideChannel...
android·java·开发语言·java-ee·android studio·android-studio·android runtime
熬夜敲代码的小N24 分钟前
Unity大场景卡顿“急救包”:从诊断到落地的全栈优化方案
java·unity·游戏引擎
坚持学习前端日记25 分钟前
容器化中间件的优缺点
java·中间件
黑客老李26 分钟前
一次有趣的通杀
java·数据库·mysql
小白学大数据30 分钟前
Python 进阶爬虫:解析知识星球 API
开发语言·爬虫·python
季明洵31 分钟前
反转字符串、反转字符串II、反转字符串中的单词
java·数据结构·算法·leetcode·字符串
赴前尘32 分钟前
记一次golang进程执行卡住的问题排查
开发语言·后端·golang
whale fall33 分钟前
如何在同一台电脑里安装32 位 Python 和 64 位 Python
开发语言·笔记·python·学习