Sunset、筱虎 2022-11-28 15:08 采纳率: 70%
浏览 16

java 可重入锁举例说明,现实一点的更好

java 可重入锁的应用场景,有没有能说明的例子,我不太理解为什么要使用可重入锁。

  • 写回答

1条回答 默认 最新

  • Huazie 全栈领域优质创作者 2022-11-28 15:45
    关注

    java 的 synchronized 关键字其实就是支持可重入的。

    假设 synchronized 不支持重入,简单举个例子吧,如下:

    我们看到 Person 有个 say 方法,有 synchronized 修饰; 子类 XiaoMin 有个 dance 方法,也被 synchronized 修饰;
    Test中main,实例化一个子类 xiaoMin ,调用它的 dance 方法。

    如果 synchronized 不支持重入:
    我们看 进入 dance 方法,首先会获取一个锁, 这个锁 是加在 XiaoMIn这个类上的;然后 在 dance方法里 又调了 say这个方法,也有个 synchronized ,它获得的锁也是加在 XiaoMin这个类上的;
    那 这个 say 方法就要 等待 dance 方法执行完 才 释放锁,而say 方法不执行完 ,dance方法就不会结束, 这就陷入了死循环了。

    所以 synchronized 支持可重入,就是为了解决这种场景的。

    public class Test {
    
        public static void main(String[] args) {
    
            XiaoMin xiaoMin = new XiaoMin();
            xiaoMin.dance();
    
        }
    }
    
    public class Person {
    
        public synchronized void say() {
            System.out.println("say");
        }
    }
    
    public class XiaoMin extends Person{
    
        public synchronized void dance() {
            System.out.println("dance");
            say();
        }
    }
    

    img


    如有帮助,欢迎采纳哈!

    在这里插入图片描述

    本人的开源项目,欢迎star支持下!!!

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 11月28日

悬赏问题

  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?