乐观锁和悲观锁是常见的并发策略,很多并不了解下面乐观锁和悲观锁的区别,下面详解乐观锁和悲观锁的区别@mikehen
乐观锁概念
乐观锁就是很乐观的意思,假设并发访问不会冲突,因此在读取数据时不会加锁,而是在更新数据时通过比较数据版本号或时间戳等乐观地认为当前数据没有被其他并发操作修改。
乐观锁的优点包括:
- 减少锁竞争和等待时间,提高并发性能;
- 不需要加锁,降低了系统开销;
- 适合读操作比写操作多的场景。
乐观锁的缺点包括:
- 需要保证数据版本号或时间戳的正确性,增加了编程复杂性;
- 当并发冲突较多时,会导致频繁的回滚和重试操作,降低了系统性能。
悲观锁概念
悲观锁总是假设最坏的情况,认为共享资源每次被访问的时候就会出现问题,所以每次在获取资源操作的时候都会上锁。
悲观锁的优点包括:
- 能够保证数据的一致性和完整性;
- 适合写操作比读操作多的场景。
悲观锁的缺点包括:
- 增加了锁的竞争和等待时间,降低了并发性能;
- 采用粗粒度锁的方式可能导致不必要的等待;
- 会增加系统开销。
乐观锁和悲观锁的区别
乐观锁和悲观锁是两种并发控制的策略,其主要区别在于对于并发访问冲突的假设和处理方式:
- 假设:乐观锁假设并发访问不会冲突,因此在读取数据时不会加锁,而悲观锁假设并发访问会冲突,因此在读取数据时会加锁。
- 处理方式:乐观锁在数据更新时检查是否有其他并发操作修改了数据,若有,则取消当前操作并回滚,重新读取数据并重试;而悲观锁在读取数据时加锁,直到当前操作完成后才释放锁。
以上就是乐观锁和悲观锁的区别详解,更多乐观锁和悲观锁请查看:乐观锁和悲观锁详解(面试必问必考)
mikechen睿哥
mikechen睿哥,十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。
👇阅读更多mikechen文章合集👇
阿里架构 |双11秒杀 |微服务 |云原生 |Docker |K8S |Kafka |分布式架构 |高并发架构
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》