深入理解Java中的synchronized锁重入

 问题导入:如果一个线程调用了一个对象的同步方法,那么他还能不能在调用这个对象的另外一个同步方法呢?

这里就是synchronized锁重入问题。

一.synchronized锁重入

 来看下面的代码:

.这个是三个同步方法的类

复制代码
public class Synfun_UseSynfun{     //同步方法1    public synchronized  void fun1(){         System.out.println("我是一号同步方法");         this.fun2();//调用二号同步方法    }     //同步方法2    public synchronized void fun2(){         System.out.println("我是二号同步方法");         this.fun3();//调用三号同步方法    }     //同步方法3    public synchronized void fun3(){         System.out.println("我是三号同步方法");     } }
复制代码

 

 线程类,在run方法中调用一号同步方法:

复制代码
public class SynThreadText extends Thread {     private Synfun_UseSynfun synfun_useSynfun;//组合上面类    public SynThreadText(Synfun_UseSynfun synfun_useSynfun){         this.synfun_useSynfun=synfun_useSynfun;//初始化上面的类    }     @Override     public void run(){         synfun_useSynfun.fun1();//调用对象类的同步方法    }      public static void main(String[] args) {         Synfun_UseSynfun synfun_useSynfun =new Synfun_UseSynfun();         SynThreadText synThreadText=new SynThreadText(synfun_useSynfun);         synThreadText.start();//开启线程    } }
复制代码

结果如下:

总结:可以看出一个线程调用了一个对象的同步方法,那么他也可以调用这个对象的另外一个同步方法。

二.synchronized锁重入支持父类继承

 那么既然synchronized支持对象的方法重入,那么他是否也支持子类继承父类的同步方法重入呢?

 不妨这样设计代码,在父类中有一个同步方法,子类继承这个方法,并且在创建一个子类的同步方法,在这个同步方法中去调用父类的同步方法。

代码如下:

复制代码
public class SubClass extends SuperClass implements Runnable {     @Override     public 

                    
                
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信