自旋锁、共享锁、独占锁
2021/6/29 23:23:20
本文主要是介绍自旋锁、共享锁、独占锁,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
自旋锁
自旋锁原理
当一个线程在获取锁的时候,如果锁已经被其他线程获取,那么该线程将循环等待,然后不断的判断是否可以成功获取锁,直到获取到锁才会退出循环。通过CAS(compare and swap)算法会用到自旋锁
适应性自旋锁原理
JDK1.6对自旋锁进行了改进,引入了自适应自旋锁,随着程序的运行和性能的监控,JVM会对锁的情况进行预测,从而给出适合的自旋时间,更加智能。
自旋锁存在的问题
- 如果一个线程持有锁的时间过长,就会导致其他等待获取锁的线程进入循环等待,消耗CPU, 使用不当会造成CPU使用率过高
- 非公平的情况下,无法满足等待时间最长的线程优先获取锁。不公平的锁就会存在’线程饥饿’问题
自旋锁使用注意事项
- 自旋锁使CPU处于忙等状态,因此临界区执行时间设置尽量短
- 并发写,竞争激烈的场景下,资源冲突概率高,一般尽量少用自旋锁
独占锁
也可以称为互斥锁,就是同时只能有一个线程获取到锁
常用的synchronized,ReentrantLock是独占锁 ReadWriteLock中的写锁是独占锁。
具有独占锁功能的子类使用AQS,必须实现tryAcquire、tryRelease等方法。
共享锁
可以有多个线程同时获取锁
常用的Semaphore(信号量) CountDownLatch都是共享锁
具有共享锁功能的子类使用AQS,必须实现tryAcquireShared、tryReleaseShared等方法 带有shared后缀的方法是支持共享锁加锁的语义
这篇关于自旋锁、共享锁、独占锁的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-01一个基于注解驱动的可视化的DDD架构-超越COLA的设计
- 2025-01-01PlantUML 时序图 基本例子
- 2025-01-01plantuml 信号时序图
- 2025-01-01聊聊springboot项目如何优雅进行数据校验
- 2024-12-31自由职业者效率提升指南:3个时间管理技巧搞定多个项目
- 2024-12-31适用于咨询行业的项目管理工具:提升跨团队协作和工作效率的最佳选择
- 2024-12-31高效协作的未来:2024年实时文档工具深度解析
- 2024-12-31商务谈判者的利器!哪 6 款办公软件能提升春节合作成功率?
- 2024-12-31小团队如何选择最实用的项目管理工具?高效协作与任务追踪指南
- 2024-12-31数据赋能,智慧养老:看板软件如何重塑养老服务生态