syc锁的优化后各种概念杂选

文章在:E:(我的网盘\我的笔记)\学习文档子目录压缩\并发技术\J2SE多线程基础\锁\syc锁的优化后各种概念杂选.doc

以下是jdk syc优化后的,优化前syc都是直接就是重量级锁

重量级锁的需要操作系统分配锁资源,每次都需要线程竞争一下,未获取到锁资源的线程会进入JVM队列waits中,等待已获得锁的线程释放后,JVM唤醒在队列排队的线程再次竞争

 

CAS无锁(自旋锁,轻量级锁):java大部分在atomic包下,耗CPU

CAS原理:内存值V,旧的预期值A,要修改的新值B 线程先从内存值V读取出来赋予旧的预期值A,基于A构造新值B,然后进入CPU操作内存改内存值V为新值B(在JAVA中是compare方法,在c++进入后汇编最终指令是luck CMPXCHG,这里是CPU操作内存时需要锁总线的,即只有一个CPU一个线程能进行操作,否则会出现ABA问题)

 

偏向锁-(默认启动时间为4秒,也就是会延迟4秒)>轻量级锁->重量级锁 转变

偏向锁(通过直接改变对象布局的4块 8位2进制(百度jol)组成的第一块markword的末三位来识别无锁0和有锁1(001无锁,101偏向锁,00轻量级锁,01重量级锁,11GC标记信息,如下图),这样就不用去操作系统申请锁了,速度当然比重量级锁快)->轻量级锁(当偏向锁除了已获得锁的线程外还有两个B,C以上的线程竞争偏向锁,那么就会锁升级为轻量级锁--即B,C两个线程一直自旋直到A将锁识别码从1改成0)->重量级锁(当自旋的线程竞争加剧,即自旋的线程过多,CPU占用较高时,JK1.6以后JVM会自动优化升级为重量级锁,及线程不再自旋,而是有JVM放入waits队列中)

 

 

 

 

偏向锁与CAS无锁(自旋锁,轻量级锁)的优劣

因为偏向锁会默认一开始无竞争,所有会4秒后启动,因此如果知道一开始就会有2个以上线程竞争,还不如直接开启自旋锁

 

CAS无锁(自旋锁,轻量级锁)与重量级锁,sync,lock等的优劣
当线程处理效率高,不会一直有很多线程访问资源时,可用自旋锁,因为一直自旋很耗CPU

相反还不如直接用重量级锁

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值