如果有一个父类,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();
    }
}

结果为

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

 

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

相关文章:

  • 2021-10-16
  • 2021-12-25
  • 2021-08-21
  • 2021-09-11
  • 2022-12-23
  • 2022-01-02
  • 2021-08-16
猜你喜欢
  • 2022-12-23
  • 2021-07-30
  • 2022-12-23
  • 2021-06-15
  • 2021-11-20
  • 2021-05-23
相关资源
相似解决方案