# 30. ReentrantLock公平锁与非公平锁分析

# 标准答案

✅ ReentrantLock 提供了公平锁和非公平锁两种模式。公平锁保证线程按请求顺序获取锁,避免线程饥饿;非公平锁可能导致线程饥饿,但性能更高。

# 答案解析

# 1️⃣ 公平锁的特点

  • 顺序获取:公平锁保证线程按请求顺序获取锁。
  • 避免饥饿:公平锁避免线程饥饿。

# 2️⃣ 非公平锁的特点

  • 性能更高:非公平锁可能导致线程饥饿,但性能更高。
  • 随机获取:非公平锁不保证线程按请求顺序获取锁。

# 常见误区

  • 误区1:认为公平锁总是优于非公平锁。实际上,非公平锁性能更高。
  • 误区2:忽视非公平锁的饥饿问题。非公平锁可能导致线程饥饿。
锁类型 描述 适用场景
公平锁 顺序获取,避免饥饿 需要顺序获取的场景
非公平锁 性能更高,可能饥饿 需要高性能的场景

# 3️⃣ 典型场景与解决方案

# ✅ 适合使用公平锁的场景

  1. 需要顺序获取
    • 使用公平锁避免线程饥饿。

# ❌ 不能用公平锁解决的场景

  1. 需要高性能
    • 使用非公平锁提高性能。

# 4️⃣ 底层原理解析

# 1. 公平锁的实现

  • 公平锁通过队列机制实现顺序获取。

# 2. 非公平锁的实现

  • 非公平锁通过随机获取实现高性能。

# 企业真实场景问题分析

# Situation(业务背景)

在某高并发系统中,需要选择合适的锁模式。

# Task(核心任务 & 关键挑战)

  • 如何选择合适的锁模式?
  • 如何在保证安全的同时提高性能?

# Action(技术方案 & 逐步拆解)

  • 方案1:使用公平锁
    • 避免线程饥饿。
  • 方案2:使用非公平锁
    • 提高系统的性能。

# Result(结果分析)

  • 使用公平锁可以避免线程饥饿。
  • 使用非公平锁可以提高系统的性能。

# 深入追问

🔹 如何选择合适的锁模式?

  • 根据任务的需求和性能要求选择合适的锁模式。

🔹 公平锁与非公平锁的区别是什么?

  • 公平锁保证顺序获取,非公平锁性能更高。

# 相关面试题

  1. 公平锁与非公平锁的区别是什么?
  2. 如何选择合适的锁模式?
  3. ReentrantLock适用于什么场景?