Java锁升级

JAVA锁状态

不同级别的锁用来保证并发情况下数据一致性,在JAVA中锁只能单向升级。
JAVA锁升级
从图中可以看出JAVA锁升级一共有4个阶段,锁升级的过程也是系统需要消耗更多资源来保证并发情况下数据一致性的过程。

不同锁存在的意义

偏向锁

  • 单次CAS: 在单线程或者单线程重入的场景下,只需要在切换ThreadId时执行一次CAS,节省了锁重入场景下轻量级锁的多次CAS开销。

轻量级锁

  • 多次CAS: 在CPU密集型操作场景下,通过多次CAS操作在多个线程之间切换对加锁资源的使用,避免线程在用户态和内核态间切换的开销。

重量级锁

  • JAVA保证数据一致性的终极大招,当前需要的开销也是最大的借助操作系统使线程在用户态和内核态间切换。

锁的优缺点

锁级别优点缺点适用场景
偏向锁加锁和解锁操作开销可以忽略不计如果是多线程场景则会带来额外的锁撤销开销单线程同步执行
轻量级锁多线程竞争不会阻塞始终得不到锁竞争的线程会执行自旋会消耗CPU资源CPU密集型操作,可快速释放资源
重量级锁保证数据一致性的终极大招用户态和内核态切换开销大IO等耗时长场景下需要大的吞吐
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值