synchronized 的锁升级策略
时间: 2023-05-30 12:05:33 浏览: 96
在 Java 中,锁升级策略是指在多线程环境下,锁会根据不同的场景自动升级或降级,以保证程序的性能和正确性。
在 Java 中,synchronized 是一种重量级锁,因为它在使用过程中需要进行多次的上锁和解锁操作。为了提高程序的性能,Java 在锁的使用过程中采用了锁升级策略。
具体来说,Java 中的锁升级策略包括三种:
1. 偏向锁(Biased Locking):当只有一个线程访问共享资源时,会使用偏向锁。偏向锁会使得该线程在后续访问共享资源时无需再次进行加锁操作,从而提高性能。
2. 轻量级锁(Lightweight Locking):当有多个线程竞争同一个锁时,会使用轻量级锁。轻量级锁使用 CAS 操作来进行加锁和解锁操作,避免了多次的上锁和解锁操作,从而提高性能。
3. 重量级锁(Heavyweight Locking):当多个线程竞争同一个锁时,且轻量级锁无法使用时,会使用重量级锁。重量级锁使用操作系统提供的互斥量来进行加锁和解锁操作,保证了程序的正确性,但是性能较低。
总的来说,Java 中的锁升级策略会自动根据不同的场景选择不同的锁类型,以保证程序的性能和正确性。
阅读全文