Synchronized锁升级的过程是怎么样的?

32 阅读1分钟

如果有线程去竞争锁,那么synchronized会尝试使用偏向锁的方式去竞争锁资源。

如果能够竞争到偏向锁,那么表示加锁成功。

直接返回就好了,如果竞争偏向锁失败,说明当前已经有其他线程占用了偏向锁那么就需要将锁升级到轻量级锁。

在轻量级锁的状态下,竞争锁的线程会根据自适应自旋次数去尝试自旋占用锁资源。

如果在轻量级锁状态下,还是没有竞争到锁呢,那就只能升级到重量级锁了。

那么在重量级锁的状态下,没有竞争到锁的线程会被阻塞,那么这个时候线程的状态叫Blocked,也就是处于锁等待的状态。

处于锁等待状态的线程需要等待获得锁的线程释放锁之后调用唤醒方法。