鉴于我有单身类
abstract class Foo {
private static Foo instance;
public static synchronized Foo getInstance() {
if(instance == null) {
instance = new FooImpl();
}
return instance;
}
}
这个方法是否锁定了Class对象?抽象类甚至有Class对象吗?
答案 0 :(得分:3)
如果您的getInstance
方法是代码中的非静态方法,则需要在Foo
的实例上调用它,该实例将是非抽象子类,并且是监视器对象的synchronized方法就是那个实例。
如果你使它synchronized
,它将锁定抽象类的类对象。
答案 1 :(得分:1)
这个方法是否锁定了Class对象? - >是的它锁定了类对象
抽象类甚至有Class对象吗? - >
在Java中,每个对象都有锁定。
我们在java中有两种类型的锁定机制-1)对象级别锁定和2)类级别锁定。
如果synchronized方法是静态的,则会有类级别锁定,如果synchronized方法是非静态的,那么它将是对象级锁定。
因此,根据您的代码,方法getInstance()会锁定Foo.class对象,尽管它是否声明了抽象。