常见的锁策略

本文介绍了Java中的各种锁策略,包括乐观锁和悲观锁的概念,读写锁的适用场景,以及Synchronized的优化策略。乐观锁在冲突较少时高效,通过版本号检测冲突;读写锁允许并发读,减少互斥;Synchronized从轻量级锁到重量级锁的转换。此外,还讨论了自旋锁、挂起等待锁、公平锁与非公平锁以及可重入锁的特点与实现。
摘要由CSDN通过智能技术生成

乐观锁与悲观锁

乐观锁:既假设锁冲突的概率比较低基本没有冲突,简单的处理冲突。
悲观锁:既假设锁冲突的概率比较高基本每次尝试加锁都会产生锁冲突,付出更多的成本处理冲突。
Synchronized初始使用乐观锁策略。当发现锁竞争比较频繁的时候就会自动切换成悲观锁策略。
乐观锁的一个重要功能就是检测数据是否发生冲突。引入“版本号”解决。
如修改账户余额:提交版本号必须大于记录当前版本号才能执行更新
在这里插入图片描述

读写锁

线程对于数据的访问,主要存在两种操作:读操作和写操作。

  • 两个读线程之间,其实不存在线程安全,就不必互斥。
  • 两个写线程之间,存在线程安全,需要互斥。
  • 一个读线程一个写线程,存在线程安全,就需要互斥。

在有些场景中,本来就写比较少,读比较多。
Synchronized并没有对读写进行区分,只要使用就一定互斥,像这种读比较多写比较少的情景效率就比较低。此时就需要读写锁。
Java标准库里就提供了这个类:

  • ReentrantReadWriteLock.ReadLock能够构造一个读锁实例,提供了lock/unlock方法进行加锁解锁.
  • ReentrantReadWriteLock.WriteLock能够构造一个写锁实例,提供 lock/un
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值