Java中锁升级的探究

文章目录

  • 锁升级概述
  • 四种锁介绍
    • 1. 无锁
    • 2. 偏向锁
      • 实现原理
    • 3. 轻量级锁(自旋锁)
      • 实现原理
    • 4. 重量级锁
      • 实现原理
  • 锁升级过程
    • 锁升级过程举例说明
  • 锁升级原理

锁升级概述

JDK 1.6之前,synchronized 还是一个重量级锁,是一个效率比较低下的锁。但是在JDK 1.6后,JVM为了提高锁的获取与释放效率对synchronized 进行了优化,引入了偏向锁和轻量级锁 ,从此以后锁的状态就有了四种:

  • 无锁:无锁是指没有对资源进行锁定,所有的线程都能访问并修改同一个资源,但同时只有一个线程能修改成功
  • 偏向锁:偏向锁是指当一段同步代码一直被同一个线程所访问时,即不存在多个线程的竞争时,那么该线程在后续访问时便会自动获得锁,从而降低获取锁带来的消耗,即提高性能
  • 轻量级锁:轻量级锁是指当锁是偏向锁的时候,却被另外的线程所访问,此时偏向锁就会升级为轻量级锁,其他线程会通过自旋的形式尝试获取锁,线程不会阻塞,从而提高性能
  • 重量级锁:重量级锁是指当有一个线程获取锁之后,其余所有等待获取该锁的线程都会处于阻塞状态

并且四种状态会随着竞争的情况逐渐升级,而且是不可逆的过程,即不可降级,这四种锁的级别由低到高依次是:无锁、偏向锁,轻量级锁,重量级锁。

如下图所示:

你可能感兴趣的:(#,Java多线程,Java面试知识点精讲,java,jvm,开发语言)