zoukankan      html  css  js  c++  java
  • synchronize类锁用父类作为锁能否锁住代码块

    如果有一个父类,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方法,锁有效, 证明用父类作为类锁,可以锁住子类对父类方法的调用,父类即使被子类调用了,其字节码对象还是只有一份,不会被不通的子类创建不同的字节码对象。

  • 相关阅读:
    适配问题
    屏幕适配
    软键盘适配
    即时通讯
    缩减APK包大小
    基于RulesEngine的业务规则实现
    基于NXBRE规则引擎实现的柔性折扣策略
    SQL Server代码如何快速格式化
    SQL Server 跨库同步数据
    HTML+AngularJS+Groovy如何实现登录功能
  • 原文地址:https://www.cnblogs.com/uoar/p/11673169.html
Copyright © 2011-2022 走看看