锁的分类

简介: 锁的分类

1. 公平锁与非公平锁

按照线程访问顺序获取对象锁。 synchronized 是非公平锁, Lock 默认是非公平锁,可以设置为公平 锁,公平锁会影响性能。

publicReentrantLock() {
sync=newNonfairSync();
    }
publicReentrantLock(booleanfair) {
sync=fair?newFairSync() : newNonfairSync();
}

2. 共享式与独占式锁

共享式与独占式的最主要区别在于:同一时刻独占式只能有一个线程获取同步状态,而共享式在同一时 刻可以有多个线程获取同步状态。例如读操作可以有多个线程同时进行,而写操作同一时刻只能有一个 线程进行写操作,其他操作都会被阻塞。

3. 悲观锁与乐观锁

悲观锁,每次访问资源都会加锁,执行完同步代码释放锁, synchronized 和 ReentrantLock 属于悲观锁。 .乐观锁,不会锁定资源,所有的线程都能访问并修改同一个资源,如果没有冲突就修改成功并退出,否 则就会继续循环尝试。乐观锁最常见的实现就是 CAS 。

适用场景: 悲观锁适合写操作多的场景。 乐观锁适合读操作多的场景,不加锁可以提升读操作的性能。

4. 乐观锁有什么问题?

  • 乐观锁避免了悲观锁独占对象的问题,提高了并发性能,但它也有缺点:
  • 乐观锁只能保证一个共享变量的原子操作。
  • 长时间自旋可能导致开销大。假如CAS长时间不成功而一直自旋,会给CPU带来很大的开销。
  • ABA问题。CAS的原理是通过比对内存值与预期值是否一样而判断内存值是否被改过,但是会有以 下问题:假如内存值原来是A, 后来被一条线程改为B,最后又被改成了A,则CAS认为此内存值并 没有发生改变。可以引入版本号解决这个问题,每次变量更新都把版本号加一。
相关文章
|
算法 机器人
【动态规划专栏】专题二:路径问题--------1.不同路径
【动态规划专栏】专题二:路径问题--------1.不同路径
201 1
|
5月前
|
API iOS开发 Docker
【最新】OpenClaw是什么?OpenClaw能做什么?OpenClaw详细介绍及怎么部署保姆级教程(本地+云端)
在AI技术从“生成内容”向“落地执行”深度转型的2026年,OpenClaw(前身为Clawdbot、曾用名Moltbot)凭借开源、本地优先、强执行能力的核心优势,成为个人与企业构建“自托管式数字员工”的首选工具。截至2026年3月,其GitHub星标已突破28万,社区贡献者超378人,技能生态覆盖办公、开发、生活等全场景,彻底打破了传统AI“只说不做”的局限,真正实现了从“对话式建议”到“自动化执行”的跨越。
4879 5
|
人工智能 监控 算法
CRM中项目型跟单模型,如何设计财务管控?
通过全业务一体化架构、动态预算监控、灵活利润配置、细粒度权限控制及AI智能分析,实现项目型跟单的财务全周期管控,是一个比较完整的项目型跟单的业务模型。
354 0
|
传感器 Python
Python实战开发演练之牲畜智能饮水机
Python实战开发演练之牲畜智能饮水机
|
程序员 C语言 C++
C语言中的goto语句:使用、争议与最佳实践
C语言中的goto语句:使用、争议与最佳实践
1523 1
|
JavaScript 前端开发 NoSQL
2022 年值得使用的 Node.js 框架
2022 年值得使用的 Node.js 框架
620 0
|
JavaScript 前端开发 UED
video标签里面的路径怎么填
video标签里面的路径怎么填
438 0
|
供应链 物联网 区块链
未来交织:新兴技术的融合与革新
【5月更文挑战第23天】 随着科技的迅猛发展,我们正步入一个由多种新兴技术共同塑造的未来。区块链技术正在重塑数据安全和交易透明度的标准;物联网(IoT)将日常物品转化为智能设备,极大地扩展了互联网的边界;而虚拟现实(VR)则在游戏、教育和医疗等领域提供了沉浸式体验。本文将探讨这些技术的最新发展趋势,并分析它们在不同应用场景中的潜力与挑战,以及这些技术如何相互交织,推动着社会和经济结构的变革。
单片机:红外遥控实验(内含红外遥控介绍+硬件原理+软件编程+配置环境)
单片机:红外遥控实验(内含红外遥控介绍+硬件原理+软件编程+配置环境)
706 0
单片机:红外遥控实验(内含红外遥控介绍+硬件原理+软件编程+配置环境)
|
机器学习/深度学习 编解码 人工智能
机器学习(十一)时间序列模型
机器学习(十一)时间序列模型
1327 0
机器学习(十一)时间序列模型

热门文章

最新文章