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

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

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

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

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

锁机制-锁的作用

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

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

锁机制-锁的分类

锁的分类并不是唯一的。

并发策略区分

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

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

资源访问权限

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

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

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

公平性区分

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

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

线程调度

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

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

作用范围

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

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

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

可重入性区分

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

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

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

相关推荐
kkeeper~4 小时前
0基础C语言积跬步之深入理解指针(5下)
c语言·开发语言
一直不明飞行4 小时前
Java的equals(),hashCode()应该在什么时候重写
java·开发语言·jvm
REDcker4 小时前
有限状态机与状态模式详解 FSM建模Java状态模式与C++表驱动模板实践
java·c++·状态模式
盲敲代码的阿豪4 小时前
Python 入门基础教程(爬虫前置版)
开发语言·爬虫·python
你的保护色5 小时前
【无标题】
java·服务器·网络
basketball6165 小时前
C++ 构造函数完全指南:从入门到进阶
java·开发语言·c++
互联科技报5 小时前
2026超融合选型:Top5品牌与市场格局解读
开发语言·perl
weixin199701080165 小时前
[特殊字符] 智能数据采集:数字化转型的“数据石油勘探队”(附Python实战源码)
开发语言·python
淘矿人5 小时前
Claude辅助DevOps实践
java·大数据·运维·人工智能·算法·bug·devops
想唱rap5 小时前
IO多路转接之poll
服务器·开发语言·数据库·c++