CodeWalk

Java中的锁分类总结

作者:我还是少年 · 2026-05-30 12:55

请汇总Java中各种锁的分类及其典型代表。

回答

我还是少年

1. 乐观锁 vs 悲观锁

  • 悲观锁:假设并发冲突发生,加锁同步(synchronized、ReentrantLock)。
  • 乐观锁:假设无冲突,先操作后验证(CAS、AtomicInteger、StampedLock乐观读)。

2. 公平锁 vs 非公平锁

  • 公平锁:先来先服务(ReentrantLock(true))。
  • 非公平锁:允许插队,吞吐量更高(synchronized、ReentrantLock(false)默认)。

3. 可重入锁 vs 不可重入锁

  • 可重入锁:同一线程可重复获取同一锁(synchronized、ReentrantLock)。
  • 不可重入锁:同一线程不可重复获取(StampedLock)。

4. 共享锁 vs 排他锁

  • 排他锁(互斥锁):一次只能一个线程持有(synchronized、ReentrantLock写模式)。
  • 共享锁:多个线程可同时持有(ReentrantReadWriteLock读锁、Semaphore)。

5. 分段锁

  • ConcurrentHashMap JDK7:对Segment加锁,一个Segment管理多个桶。

6. 自旋锁

  • 通过CAS循环等待,不挂起线程(JUC中通过Unsafe+循环实现)。

选择建议:根据并发强度、资源冲突概率和性能要求选择合适的锁。