synchronized 锁升级过程

  1. 偏向锁:当第一个访问锁的线程进来,发现没有其他线程占用锁,线程ID为空则认为是可偏向状态,就设置锁的对象头中线程ID设置为当前线程ID,然后执行同步代码块。
  2. 轻量级锁:当有第二个线程参与竞争时,线程2将暂停当前线程1,撤销偏向锁,升级为轻量级锁,接着线程2自旋来获取锁对象。
  3. 重量级锁:在线程2自旋等待时,又有一个线程3来竞争锁,就会升级为重量级锁

参考:
Java对象结构与锁实现原理及MarkWord详解
Java并发——Synchronized关键字和锁升级,详细分析偏向锁和轻量级锁的升级
Synchronized的原理及自旋锁,偏向锁,轻量级锁,重量级锁的区别

你可能感兴趣的:(Java,SE/EE)