当前位置: 首页 > news >正文

ReentrantLock 的典型使用场景和实现方法

基本概念

ReentrantLock 是 Java 幑发包中提供的可重入互斥锁,相比 synchronized 关键字提供了更高的灵活性和功能。

典型使用场景

1. 防止重复提交

防止用户重复点击按钮导致的重复业务处理。

2. 缓存双检锁机制

在缓存失效时,防止多个线程同时重建缓存。

3. 资源竞争控制

对共享资源的访问进行精确控制。

4. 定时任务并发控制

确保同一时刻只有一个定时任务实例运行。

实现方法

方法一:在 Service 层直接使用

@Service
public class BusinessService {private final ReentrantLock lock = new ReentrantLock();public void processBusinessLogic(String key) {lock.lock();try {// 执行核心业务逻辑doSomething(key);} finally {lock.unlock();}}private void doSomething(String key) {// 具体业务实现}
}

方法二:使用静态 Map 管理多个锁

@Service
public class MultiKeyService {private static final Map<String, ReentrantLock> lockMap = new ConcurrentHashMap<>();public void processByKey(String key) {ReentrantLock lock = lockMap.computeIfAbsent(key, k -> new ReentrantLock());lock.lock();try {// 处理特定 key 的业务逻辑handleBusiness(key);} finally {lock.unlock();}}private void handleBusiness(String key) {// 具体业务实现}
}

方法三:封装为工具类使用

@Component
public class LockUtil {private static final Map<String, ReentrantLock> lockMap = new ConcurrentHashMap<>();public <T> T executeWithLock(String key, Supplier<T> supplier) {ReentrantLock lock = lockMap.computeIfAbsent(key, k -> new ReentrantLock());lock.lock();try {return supplier.get();} finally {lock.unlock();}}public void executeWithLock(String key, Runnable runnable) {ReentrantLock lock = lockMap.computeIfAbsent(key, k -> new ReentrantLock());lock.lock();try {runnable.run();} finally {lock.unlock();}}
}// 使用示例
@Service
public class BusinessService {@Autowiredprivate LockUtil lockUtil;public void processData(String key) {lockUtil.executeWithLock(key, () -> {// 执行业务逻辑doProcess(key);});}
}

方法四:使用 tryLock 避免阻塞

@Service
public class TimeoutControlService {private final ReentrantLock lock = new ReentrantLock();public boolean processWithTimeout() {try {if (lock.tryLock(3, TimeUnit.SECONDS)) {try {// 执行业务逻辑doProcess();return true;} finally {lock.unlock();}}} catch (InterruptedException e) {Thread.currentThread().interrupt();}return false;}private void doProcess() {// 具体业务实现}
}

在 Spring Bean 中的注意事项

1. 锁的作用域

@Service
public class SingletonService {// 实例变量 - 同一个锁对象private final ReentrantLock lock = new ReentrantLock();// 每次调用创建新锁 - 锁失效// private ReentrantLock getLock() { return new ReentrantLock(); }
}

2. 异常处理

@Service
public class ExceptionSafeService {private final ReentrantLock lock = new ReentrantLock();public void safeProcess() {lock.lock();try {// 业务逻辑可能会抛出异常riskyOperation();} finally {// 必须在 finally 中释放锁lock.unlock();}}
}

与 @Transactional 结合使用的注意事项

@Service
public class TransactionalLockService {private final ReentrantLock lock = new ReentrantLock();// 推荐:先加锁后开启事务public void correctWay() {lock.lock();try {transactionalMethod();} finally {lock.unlock();}}@Transactionalpublic void transactionalMethod() {// 数据库操作}
}

最佳实践总结

  1. 锁的粒度:根据业务需求合理设计锁的粒度
  2. 异常安全:始终在 finally 块中释放锁
  3. 避免死锁:统一加锁顺序,避免嵌套锁
  4. 性能考虑:对于竞争不激烈的场景,synchronized 可能更合适
  5. 监控告警:添加锁等待时间监控,及时发现性能瓶颈

ReentrantLock 在 Spring Boot 中主要用于需要更细粒度控制并发访问的场景,相比 synchronized 提供了更多的功能和灵活性。

http://www.jsqmd.com/news/53979/

相关文章:

  • 2025 年 11 月制造业降本增效咨询公司权威推荐榜:精益生产与成本优化专家团队深度解析及服务优势全景解析
  • 无源探头与高压探头技术对比分析
  • 数字马力笔试
  • 2025年上海离婚诉讼律师推荐排行榜,哪个好?哪个靠谱?选哪个?
  • 直击提分痛点!2025年11月贝赛思考试培训核心机构深度评测,封闭班首选推荐
  • 2025留学中介南京哪家好
  • 2025 年 11 月管理咨询公司权威推荐榜:战略规划与组织优化口碑优选,专业服务助力企业高效成长
  • Postman接口测试教程(完整版) - 指南
  • 开源项目观察8月报
  • jetson/ubuntu22.04系统安装ROS2
  • 2025年上海离婚谈判律师推荐排行榜,哪个好?哪个靠谱?选哪个?
  • 2025年双梁龙门吊厂家权威推荐榜单:10吨龙门吊‌/港口龙门吊‌/门式起重机源头厂家精选
  • 为你的STM32毕设项目加点料:AI智能风扇智能温控与风扇调节系统
  • ReentrantReadWriteLock的使用方法和使用场景
  • 2025 年 11 月中国十大咨询公司权威推荐榜:战略咨询,管理咨询,财务咨询,人力资源咨询,品牌咨询,专业实力与行业口碑深度解析
  • 2025年公路液压打桩机供货厂家权威推荐榜单:高速护栏立柱打桩机/马路护栏打桩机/道路打桩机源头厂家精选
  • 2025年重庆环境好的西点烘焙学校排行榜,设备先进口碑好的机
  • 2025年上海婚姻律所推荐排行榜,哪家好?哪家靠谱?选哪家?
  • 2025年北京离婚诉讼律师推荐排行榜,哪个好?哪个靠谱?选哪个?
  • 抗皱好的护护肤品年度更新:深纹改善率成为决定排名的关键指标
  • 2025年上海离婚房产律师推荐排行榜,哪个好?哪个靠谱?选哪个?
  • 2025年11月北京SAT备考指南:口碑辅导机构及封闭班攻略
  • IoT技术在产线实践中的应用 - 详解
  • Spring AI集成MCP Client
  • 2025 年 11 月管理咨询公司权威推荐榜:战略规划与组织变革领域十大专业机构深度解析
  • 2025英国留学中介机构
  • 精华液哪个牌子最好用?紧致提拉、美白亮肤、屏障修护全解析
  • 2025上海留学中介服务哪个好
  • 2025留学香港研究生哪个中介好一点
  • 2025杭州英国留学机构排名