0
点赞
收藏
分享

微信扫一扫

JDK1.6之后引入偏向锁(轻量级)

千行 2022-04-15 阅读 82
java

实际上1.6之前的Sync锁是性能不太好的,是非常重的锁(重量级锁)。

重量级锁 :只有一个线程能获取锁,其他线程被迫进入阻塞队列,空等,消耗cpu资源。

实际业务中 : 虽然为了保证安全必须加锁,但是并不一定会使用很多线程 ,所以引入了偏向锁的概念: 让下一次锁资源竞争时,更容易把锁分配给上一次抢到资源的锁 (example:给上次的线程加个id,下次去抢线程时直接报上姓名,让锁能识别这个线程,ok,再分给它资源)

这样可以解决很多只有一个线程的业务,增加效率。

如果很多个线程开始抢资源,ok,这时候锁升级成为轻量级锁(CAS轻度竞争(比对是不是释放锁了))。

引申: 轻量级锁不一定比重量级锁性能高。(大量线程等待加锁,在自旋的过程中浪费CPU资源)。如果大量线程自旋的消耗,大于CPU进行一次线程上下文切换的时间,就会认为此时使用CAS不划算,不如直接转成重量级锁节约资源 (这大概就是锁膨胀(升级)的过程)

升级锁是根据一个参数 markword

以下是流程图:

 

举报

相关推荐

轻量级锁

0 条评论