news 2026/4/19 19:12:58

Java高频面试题:什么是可重入锁?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java高频面试题:什么是可重入锁?

大家好,我是锋哥。今天分享关于【Java高频面试题:什么是可重入锁?】面试题 。希望对大家有帮助;

Java高频面试题:什么是可重入锁?

可重入锁(Reentrant Lock),也叫递归锁(Recursive Lock),是一种允许同一个线程多次获取锁的锁机制。它的特点是,当一个线程已经持有该锁时,它可以再次请求并获取该锁,而不会被阻塞。每次锁的请求都会增加锁的计数,当计数为零时,锁才会被释放。

特点

  1. 线程可以重复获取锁:同一线程可以多次获取可重入锁,而不会死锁。
  2. 锁计数:每次获取锁时,锁的计数会增加,每次释放锁时,计数会减少。当计数为0时,锁才真正释放。
  3. 避免死锁:因为线程可以重新获得自己已经持有的锁,所以避免了传统锁机制中线程因反复请求同一把锁而死锁的问题。

举个例子

假设一个线程在执行某个方法时已经获得了锁,而该方法内部又调用了另一个需要锁的函数,在可重入锁的机制下,线程可以再次获得锁并继续执行,不会被阻塞。

class ReentrantLockExample { private final ReentrantLock lock = new ReentrantLock(); public void methodA() { lock.lock(); try { System.out.println("Method A is executing"); methodB(); // 线程可以再次获得锁 } finally { lock.unlock(); } } public void methodB() { lock.lock(); try { System.out.println("Method B is executing"); } finally { lock.unlock(); } } }

在上面的例子中,methodA锁住了lock,在methodA内部调用methodB时,线程仍然能够获得该锁,因为它已经持有该锁。

应用场景

  • 递归调用:如果程序中存在递归调用,而且递归函数需要加锁,那么可重入锁就非常有用。
  • 避免死锁:当同一个线程需要多次访问同一个资源时,普通锁可能导致死锁,而可重入锁能保证顺利完成。

注意事项

  1. 锁的释放:每次获取锁后,必须确保在正确的位置释放锁,否则可能会引发锁泄漏的问题。
  2. 性能开销:可重入锁比普通锁有更多的开销,因为它需要维护锁的计数和检查递归获取。

总的来说,可重入锁是一种非常有用的机制,尤其适用于需要递归或同一线程多次请求同一个资源的情况。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 19:11:15

如何5分钟专业优化Windows系统:Winhance中文版终极指南

如何5分钟专业优化Windows系统:Winhance中文版终极指南 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance-z…

作者头像 李华
网站建设 2026/4/19 19:07:53

别再折腾了!Redmi AC2100 Padavan固件IPv6桥接的终极避坑指南

Redmi AC2100 Padavan固件IPv6桥接实战:从原理到避坑全解析 每次看到路由器后台那个灰色的IPv6状态指示灯,心里就像被猫抓了一样难受?明明光猫已经分配了IPv6地址,为什么局域网设备就是拿不到?如果你正在用Redmi AC210…

作者头像 李华
网站建设 2026/4/19 19:06:51

【Minecraft】从零构建:为你的Minecraft服务器集成第三方皮肤站认证

1. 为什么需要第三方皮肤站认证? 很多Minecraft服务器管理员都遇到过这样的困扰:玩家们想要使用自定义皮肤,但官方正版验证又限制了非正版玩家的加入。这时候第三方皮肤站认证就成了一个完美的解决方案。我自己运营服务器时就遇到过这个难题…

作者头像 李华
网站建设 2026/4/19 19:06:03

终极Ofd2Pdf完整指南:3种简单方法实现OFD到PDF无损转换

终极Ofd2Pdf完整指南:3种简单方法实现OFD到PDF无损转换 【免费下载链接】Ofd2Pdf Convert OFD files to PDF files. 项目地址: https://gitcode.com/gh_mirrors/ofd/Ofd2Pdf OFD作为我国自主的电子文档格式标准,在政务、金融、教育等关键领域广泛…

作者头像 李华
网站建设 2026/4/19 19:05:45

PyTorch图像处理进阶:用torchvision.transforms打造高效数据增强流水线

PyTorch图像处理进阶:用torchvision.transforms打造高效数据增强流水线 当你在训练计算机视觉模型时,数据增强可能是最容易被忽视却又最有效的性能提升手段之一。我曾在多个实际项目中观察到,仅仅通过优化数据增强策略,就能让模型…

作者头像 李华