synchronized
是 Java 中的关键字,用于实现同步,而其内部的锁实现机制包括偏向锁、轻量级锁、重量级锁:
-
偏向锁 :
- 偏向锁是一种为单线程优化的锁状态。它的目的是减少多线程竞争情况下的性能开销。
- 当一个线程首次访问一个同步块时,锁会升级为偏向锁,该线程成为锁的偏向者,以后再次进入同步块时,无需竞争锁。
- 如果其他线程尝试获取这个锁,偏向锁会升级为轻量级锁或重量级锁,取决于竞争情况。
- 悲观锁
-
轻量级锁 :
- 轻量级锁是一种针对多线程竞争情况的优化锁状态,适用于低竞争场景。
- 当多个线程尝试获取同一个锁时,它们会通过自旋等待获取锁,而不是进入阻塞状态。
- 轻量级锁使用 CAS 操作来保证锁的原子性,但它仍然是一种乐观锁。
- 如果自旋等待不成功,轻量级锁会升级为重量级锁。
- 乐观锁
-
重量级锁 :
- 重量级锁是一种用于高竞争情况的锁状态。当多个线程争夺同一个锁时,它们会进入阻塞状态,而不是自旋等待。
- 重量级锁涉及到内核态和用户态的线程切换,