synchronized的优化

本文详细介绍了Java中synchronized的优化,包括CAS操作、对象头、偏向锁、轻量级锁和重量级锁。偏向锁在无竞争时提高效率,轻量级锁使用CAS避免阻塞,而重量级锁在多线程竞争时使用。通过对锁状态的升级,减少了锁带来的性能开销。
摘要由CSDN通过智能技术生成

我们知道synchronized同一时刻只能有一个线程获得对象的monitor监听器,这有时候就会导致我们的效率大大降低,所以引出了锁的优化,锁的优化也就是锁的几种状态,在这之前有两个概念需要知道:CAS操作和java对象头。

CAS操作

什么是CAS操作?

我们平时所说的获取锁其实是一种悲观锁的操作,假设在访问临界区代码的时候都会有冲突,这就意味着只有一个线程获取到锁,而别的线程都会被阻塞。而CAS操作是一种乐观锁,它假设不会有 冲突,那么自然就不会有阻塞的线程,那么一旦有了冲突有了冲突,又是怎么处理的呢?无锁操作是使用CAS(compare and swap)又叫做比较交换来鉴别线程是否出现冲突,出现冲突就重试当前操作直到没有冲突为止。

CAS的操作过程

CAS比较交换的过程可以通俗的理解为CAS(V,O,N),包含三个值分别为:V 内存地址存放的实际值;O 预期的值(旧值);N 更新的新值。当V和O相同时,也就是说旧值和内存中实际的值相同表明该值没有被其他线程更改过,即该旧值O就是目前来说最新的值了,自然而然可以将新值N赋值给V。反之,V和O不相同,表明该值已经被其他线程改过了则该旧值O不是最新版本的值了,所以不能将新值N赋给V,返回V即可。当多个线程使用CAS操作一个变量时,只有一个线程会成功,并成功更新,其余会失败。失败的线程会重新尝试,当然也可以选择挂起线程。

未优化前和

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值