尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
重入锁及实现原理
可重入锁从字面来理解就是可以重复进入的锁。可重入锁也叫做递归锁指的是同一线程外层函数获得锁之后内层递归函数仍然有获取该锁的代码但不受影响。在JAVA环境下ReentrantLock和synchronized都是可重入锁。synchronized是一个可重入锁。在一个类中如果synchronized方法1调用了synchronized方法2方法2是可以正常执行的这说明synchronized是可重入锁。否则在执行方法2想获取锁的时候该锁已经在执行方法1时获取了那么方法2将永远得不到执行。可重入锁在什么场景使用呢可重入锁主要用在线程需要多次进入临界区代码时需要使用可重入锁。具体的例子比如上文中提到的一个synchronized方法需要调用另一个synchronized方法时。可重入锁的实现原理是怎么样的加锁时需要判断锁是否已经被获取。如果已经被获取则判断获取锁的线程是否是当前线程。如果是当前线程则给获取次数加1。如果不是当前线程则需要等待。释放锁时需要给锁的获取次数减1然后判断次数是否为0了。如果次数为0了则需要调用锁的唤醒方法让锁上阻塞的其他线程得到执行的机会。下面是一个用synchronized实现的例子123456789101112131415161718publicclassReentrantTestimplementsRunnable {publicsynchronizedvoidget() {System.out.println(Thread.currentThread().getName());set();}publicsynchronizedvoidset() {System.out.println(Thread.currentThread().getName());}publicvoidrun() {get();}publicstaticvoidmain(String[] args) {ReentrantTest rt newReentrantTest();for(;;){newThread(rt).start();}}}整个过程没有发生死锁的情况截取一部分输出结果如下Thread-8492Thread-8492Thread-8494Thread-8494Thread-8495Thread-8495Thread-8493Thread-8493set()和get()同时输出了线程名称表明即使递归使用synchronized也没有发生死锁证明其是可重入的。
RELATED

相关推荐

Binge-和时间做朋友

Binge-和时间做朋友

Binge-和时间做朋友 引言:时间的悖论在技术世界中,我们常常陷入一种矛盾:一方面追求即时反馈,希望每一行代码都能立即运行;另一方面,又渴望构建能经得起时间考验的稳定系统。这种矛盾源于我们对时间的误解—…

📅 2026/9/6 0:46:48
单一职责原则的常见误区

单一职责原则的常见误区

单一职责原则的常见误区 单一职责原则(Single Responsibility Principle,SRP)是面向对象设计中五大基本原则(SOLID)之一。它的核心思想是:一个类应该只有一个引起它变化的原因。然而,在实际开发…

📅 2026/9/14 19:27:30
TPIC7710EVM评估套件:汽车电子电机驱动ASIC的硬件设计与GUI软件实操指南

TPIC7710EVM评估套件:汽车电子电机驱动ASIC的硬件设计与GUI软件实操指南

1. 项目概述与核心价值在汽车电子和工业控制领域,当我们拿到一颗功能复杂的专用集成电路(ASIC)时,最头疼的问题往往不是芯片本身,而是如何快速、准确地验证它的功能,并将其集成到自己的系统中。数据手册上的…

📅 2026/8/23 2:32:18
MORE NEWS

更多资讯

📰

Podman `--inherit-labels` 选项深度解析:podman build 中基础镜像标签继承的控制机制

Podman --inherit-labels 选项深度解析:podman build 中基础镜像标签继承的控制机制 【免费下载链接】podman Podman: A tool for managing OCI containers and pods. 项目地址: https://gitcode.com/gh_mirrors/po/podman 本篇围绕 Podman 构建选项文件 inh…

📰

NixOS 配置抽象:用 let 与函数消除 Nix 配置重复,以 Apache 虚拟主机为例

NixOS 配置抽象:用 let 与函数消除 Nix 配置重复,以 Apache 虚拟主机为例 【免费下载链接】nixpkgs Nix Packages collection & NixOS 项目地址: https://gitcode.com/GitHub_Trending/ni/nixpkgs 本文围绕 NixOS 手动配置文档中的「抽象」&a…

📰

Eino流式处理4大范式详解:Invoke、Stream、Collect与Transform实战指南

Eino流式处理4大范式详解:Invoke、Stream、Collect与Transform实战指南 【免费下载链接】eino Go 语言编写的终极大型语言模型(LLM)应用开发框架,强调简洁性、可扩展性、可靠性与有效性。 项目地址: https://gitcode.com/CloudW…

📰

Jest 16.0 发布解读:Turbocharged CLI、快照格式重构与新匹配器

Jest 16.0 发布解读:Turbocharged CLI、快照格式重构与新匹配器 【免费下载链接】jest Delightful JavaScript Testing. 项目地址: https://gitcode.com/gh_mirrors/je/jest 本文基于 Jest 16.0 官方发布博客 整理而成。Jest 16 是 2016 年 10 月发布的重大版…

📰

LibreHardwareMonitor 完整上手指南:5 分钟看懂电脑 CPU 温度、风扇与电压

LibreHardwareMonitor 完整上手指南:5 分钟看懂电脑 CPU 温度、风扇与电压 【免费下载链接】LibreHardwareMonitor Libre Hardware Monitor is free software that can monitor the temperature sensors, fan speeds, voltages, load and clock speeds of your comp…

📰

OpenDesign 中的 Cal.com 设计系统包:从 USAGE.md 到 tokens.css 的完整使用指南

OpenDesign 中的 Cal.com 设计系统包:从 USAGE.md 到 tokens.css 的完整使用指南 【免费下载链接】open-design 🎨 Best DeepSeek Harness Design Plugin. The open-source Claude Design alternative. 🖥️ Local-first desktop app. &#…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬