synchronized父子类对象锁重入

synchronize必须是重入锁,为什么呢? 就是因为父子类不会破坏继承基础思想:

父子类对象锁重入的意思是子类的同步方法调用了父类的同步方法同样不需要再去竞争锁,因为该线程已经拥有了该对象的锁,子类对象继承了父类的方法。

我们看下代码:

父类:

复制代码
package com.ck.thread;
 
 
public class Father {
 
 
    public synchronized void eat() {
 
        System.out.println("Father:吃饭");
 
        xiwan();
 
        System.out.println("Father:吃饭整个过程结束");
 
    }
   
 
    public synchronized void xiwan() {
 
        System.out.println("Father:洗碗");
 
    }
 
 
}
复制代码

子类中的洗手吃饭方法调用了父类的吃饭方法:

复制代码
package com.ck.thread;
 
 
public class Son extends Father{
   
 
    public synchronized void xishouEat() {
 
        System.out.println("son : 洗手");
 
        /**
         * 吃饭之前先洗手,洗完手再吃饭
         */
 
        eat();
 
    }
 
}
复制代码

然后我们修改下吃饭的线程类:

复制代码
package com.ck.thread;
 
 
 
public class EatThread extends Thread{
 
   
    private Son son;
 
 
    public EatThread(Son son) {
 
        super();
 
        this.son = son;
 
    }
 
 
    public Son getSon() {
 
        return son;
 
    }
 
 
    public void setFather(Son son) {
 
        this.son = son;
 
    }
   
 
    @Override
 
    public void run() {
 
        son.xishouEat();
 
    }
 
 
}
复制代码

执行主方法:

复制代码
package com.ck.thread;
 
 
public class MainThread {
 
 
    public static void main(String[] args) throws InterruptedException {
 
        Son son = new Son();
 
        EatThread eatThread = new EatThread(son);
 
        eatThread.start();
 
    }
 
 
}
复制代码

执行结果:

son : 洗手
 
Father:吃饭
 
Father:洗碗
 
Father:吃饭整个过程结束

总结:通过上面例子我们可以看到 xishouEat 方法调用父类eat方法的时候,可以直接调用,不需要等待,这就是synchronized 父子类锁重入 ,因为子类继承了父类实际上就是拥有了父类的public方法,所有父类的public 方法也属于子类对象。同一个对象同步方法调用就是我们上一篇讲的内容,同一个对象拥有了同一把锁,不需要竞争。

posted @   47号Gamer丶  阅读(209)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示