锁的分类

简介: 锁的分类

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认为此内存值并 没有发生改变。可以引入版本号解决这个问题,每次变量更新都把版本号加一。
相关文章
|
Kubernetes Cloud Native API
【云原生】kubernetes v1.18部署Metrics-Server:v0.3.6
【云原生】kubernetes v1.18部署Metrics-Server:v0.3.6
492 1
|
监控 数据可视化 虚拟化
服务器虚拟化
服务器虚拟化
708 0
|
存储 JSON 数据格式
JSON - JSONObject 按 Put 顺序输入和输出
JSON - JSONObject 按 Put 顺序输入和输出
1149 0
JSON - JSONObject 按 Put 顺序输入和输出
|
人工智能 分布式计算 算法框架/工具
揭开阿里巴巴PAI的神秘面纱:引领人工智能计算的新篇章
揭开阿里巴巴PAI的神秘面纱:引领人工智能计算的新篇章 随着人工智能技术的飞速发展,越来越多的企业开始关注并投入到AI的研究和应用中。阿里巴巴作为全球领先的科技公司,也在AI领域做出了卓越的贡献。今天,就让我们一起来揭开阿里巴巴PAI的神秘面纱,了解这个强大的AI平台如何引领人工智能计算的新篇章。 PAI,全称阿里巴巴公共AI平台,是一个集数据准备、模型开发与训练、模型部署于一体的综合性AI平台。PAI的业务架构分为五层,从基础设施层到业务层,涵盖了AI计算的全过程。
1230 2
Vue3拖拽插件(vuedraggable@next)
vuedraggable 是一款 Vue2 拖拽插件,可轻松实现列表项的拖拽排序与交互。通过简单配置,即可在不同区域间拖动元素并实现数据同步。支持多种事件监听和自定义样式。
1289 2
Vue3拖拽插件(vuedraggable@next)
|
12月前
|
消息中间件 Java Kafka
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
Flink-04 Flink Java 3分钟上手 FlinkKafkaConsumer消费Kafka数据 进行计算SingleOutputStreamOperatorDataStreamSource
271 1
|
存储 缓存 NoSQL
Redis深度解析:部署模式、数据类型、存储模型与实战问题解决
Redis深度解析:部署模式、数据类型、存储模型与实战问题解决
|
机器学习/深度学习 算法 测试技术
PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据
PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据
|
网络协议
逆向学习网络篇:心跳包与TCP服务器
逆向学习网络篇:心跳包与TCP服务器
470 0
|
小程序
微信小程序跳转页面传多个参数(拼接)
微信小程序跳转页面传多个参数(拼接)
276 0