首页 > 其他 > 详细

synchronize类锁用父类作为锁能否锁住代码块

时间:2019-10-14 19:50:26      阅读:96      评论:0      收藏:0      [点我收藏+]

如果有一个父类,Demo如下

public class Demo {
    public void demo1(){
        synchronized (Demo.class){
            while (true){
                System.out.println(Thread.currentThread());
            }
        }
    }
}

其中,代码块锁住的内容为父类的字节码对象,这个父类有两个子类继承其对象

public class DemoSon extends Demo implements Runnable{
    @Override
    public void run() {
        demo1();
    }
}

public class DemoSon2 extends Demo implements Runnable{
@Override
public void run() {
demo1();
}
}

此时测试一下

public class Test {
    public static void main(String[] args) {
        Thread thread1 = new Thread(new DemoSon());
        Thread thread2 = new Thread(new DemoSon2());
        thread1.start();
        thread2.start();
    }
}

结果为

技术分享图片

 

可以看到只有一个线程在运行,另一个线程没有进入demo1方法,锁有效, 证明用父类作为类锁,可以锁住子类对父类方法的调用,父类即使被子类调用了,其字节码对象还是只有一份,不会被不通的子类创建不同的字节码对象。

synchronize类锁用父类作为锁能否锁住代码块

原文:https://www.cnblogs.com/uoar/p/11673169.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!