锁升级

在较低版本的JDK版本中,当使用Synchronized关键字后,会直接加一把重量级锁。由于加锁会涉及到用户态到内核态的切换,浪费资源,而且出现锁竞争的概率比较低。基于这个考虑,在后续的JDK版本中,对Synchronized锁进行了优化。

偏向锁

MarkWord上会记录当前线程指针,下次同一个线程加锁的时候,不需要争用,只需要判断线程指针是否是同一个。hashCode备份在线程栈上,线程销毁时,降级为无锁。

轻量级锁

锁出现争用,锁升级为轻量级锁。每个线程有自己的LockRecord在自己的线程上,用CAS去争用MarkWord上的LR指针,线程指向哪个线程的LR,哪个线程就拥有锁。

image.png