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

可重入锁理解(redission)

在 Java 中,可重入锁(Reentrant Lock) 是一种允许同一线程多次获得同一锁的同步机制。这意味着,如果一个线程已经持有某个锁,它可以再次获取该锁而不会被阻塞。

🔄 什么是可重入锁?

可重入锁允许同一线程多次进入受锁保护的代码块,而不会导致死锁。这在方法调用中尤为重要,尤其是当一个同步方法调用另一个同步方法时。

示例:

public synchronized void methodA() {methodB();
}public synchronized void methodB() {// 执行某些操作
}

在上述示例中,methodAmethodB 都是同步方法。当一个线程调用 methodA 时,它已经获得了该对象的锁。随后,它调用 methodB,如果锁不是可重入的,线程将会被阻塞,导致死锁。但由于 Java 的 synchronized 是可重入的,线程可以顺利进入 methodB

🧵 synchronizedReentrantLock 的可重入性

  • synchronized:Java 的内置同步机制,使用对象的监视器锁。它是可重入的,允许同一线程多次进入同步代码块。

  • ReentrantLock:位于 java.util.concurrent.locks 包中,提供了与 synchronized 相似的功能,但具有更多的灵活性,如可中断的锁获取、尝试获取锁以及公平性设置等。它也是可重入的,允许同一线程多次获取锁,每次获取都需要对应的释放。


🔒 可重入锁的意义

可重入锁的主要意义在于防止死锁,尤其是在以下场景中:

  1. 嵌套调用:一个同步方法调用另一个同步方法,如果锁不可重入,线程将会被自己阻塞,导致死锁。

  2. 递归调用:方法递归调用自身,并且每次调用都需要获取同一锁,如果锁不可重入,将会导致死锁。

通过使用可重入锁,线程可以在持有锁的情况下再次获取锁,避免了上述问题。


✅ 总结

可重入锁是多线程编程中的重要机制,它允许同一线程多次获取同一锁,防止在嵌套或递归调用中发生死锁。Java 提供了两种主要的可重入锁:内置的 synchronizedReentrantLock。根据具体需求选择合适的锁机制,可以提高程序的安全性和性能。

相关文章:

  • typescript类型定义讲解
  • sqlite数据库操作
  • python+open3d选择点云上的某个点并获取其对应三维坐标
  • 深入理解 Pinia:从基础到进阶的完整指南
  • 如何看待首个通用型智能体 (The First General AI Agent) Manus发布?
  • PyTorch 中如何针对 GPU 和 TPU 使用不同的处理方式
  • 在vue里,使用dayjs格式化时间并实现日期时间的实时更新
  • 在 Vue 2 中使用 qrcode 库生成二维码
  • Baklib打造AI就绪型知识管理引擎
  • Android Studio开发安卓app 设置开机自启
  • github+ Picgo+typora
  • AI 实践探索:辅助生成测试用例
  • Redis 集群版本升级指南:从 Redis 7 升级到 Redis 8
  • Linux内核初始化机制全解析:从pure_initcall到late_initcall
  • Java高频面试之并发编程-13
  • Go语言八股之并发详解
  • 七彩喜微高压氧舱:探索健康与康复的新维度
  • Linux 内核学习(6) --- Linux 内核基础知识
  • Advanced Installer 22.5打包windows 安装包
  • 【Bluedroid】 HID 设备应用注册与主机服务禁用流程源码解析
  • 中山大学人类学系原系主任冯家骏逝世,享年95岁
  • 巴防空系统击落印度无人机,印称巴方违反停火协议
  • 家电维修担心遇“李鬼”?上海推动“物业+专业服务”进社区
  • 稳住外贸基本盘,这个中部大省出手了
  • 中国象棋协会坚决支持司法机关依法打击涉象棋行业的违法行为
  • 全国人大常委会启动食品安全法执法检查