浅谈Java内置锁synchronized理解

第一需要知道在jdk1.5以前,synchronized是较重量级的,但是jdk1.8后做了优化。其性能能和李二狗写的reentrancelock一教高下。(平生不识李二狗,学透并发也枉然)

再次先友情提示下:CAS可以先了解下,简单来说就是比较与交换,类似于乐观锁得概念,在对旧值做修改前,先从内存中取出当前值是否域旧值相等,如果相等就说明没有人修改,可以将新值替换旧值完成修改。(再次说明下CAS有两个确定,1.不满足条件一直做自旋循环可能导致CPU标高2.ABA问题,可以通过加版本号解决。扯得有点多了,但是有兴趣的可以去了解下)

言归正传:一jdk1.8为例:
默认开启偏向锁:创建对象后默认4s开启偏向锁,当没有竞争时为匿名偏向,偏向操作系统底层得一个线程。
1.有一个线程获取该对象,升级为偏向锁偏向该线程,偏向锁释放还是为偏向锁
2.存在其他线程竞争,升级为轻量级线程,轻量级锁释放是无锁状态
<--------------------------------------------------------------------------------------------------------------------->
3.多个线程竞争,升级为重量级锁,在这里是个性能得分水岭。重量级锁以前都是不需要切换到内核态的,不会创建监视器monitor对象,可以理解采用CAS算法保证原子性和可见性。但是在升级为重量级前经过CAS算法自旋,发现一直未能获得锁所以直接膨胀为重量级锁。因为线程都是有内核态创建和管理得这就涉及到内核态和用户态得上下文切换,极其耗费性能。重量级锁释放为无锁状态。

注:锁只会升级不会降级。文中写的释放到无锁状态只是一个过程。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值