0%

synchronized底层实现

文章字数:180,阅读全文大约需要1分钟

mutex

  • synchtonized膨胀为重量级锁时使用mutex实现的
  • 操作系统提供的互斥锁
  • mutex是重量级锁,线程获取不到锁之后就会进入休眠状态,CPU会转换到内核态,而代码的运行区在用户态。切换会导致性能降低,所以是重量级。
  • spin_locklinux提供的自旋锁

锁膨胀

  • 偏向锁,使用CAS判断对象头线程标记是不是本身,性能最好,不会进行用户态和内核态的切换
  • 轻量锁,使用CAS设置当前线程为对象头的标记
  • 重量锁,使用mutex的互斥,需要用户态和内核态切换,消耗资源。