我看到了这样的答案,试图通过评论来澄清,但对这里的例子不满意。
也许是时候提出这个具体问题了......
为什么枚举单例实现被称为惰性?
public enum EnumLazySingleton {
INSTANCE;
EnumLazySingleton() {
System.out.println("constructing: " + this);
}
public static void touchClass() {}
}
Run Code Online (Sandbox Code Playgroud)
它与急切的实现有何不同?
public class BasicEagerSingleton {
private static final BasicEagerSingleton instance = new BasicEagerSingleton();
public static BasicEagerSingleton getInstance() {
return instance;
}
private BasicEagerSingleton() {
System.out.println("constructing: " + this);
}
public static void touchClass() {}
}
Run Code Online (Sandbox Code Playgroud)
两者都将初始化实例而不访问INSTANCE/getInstance()- 例如 call touchClass()。
public class TestSingleton {
public static void main(String... args) …Run Code Online (Sandbox Code Playgroud) java singleton enums double-checked-locking lazy-initialization
A级1
public class A {
private static final A instance = new A();
public static A getInstance() {
return new A();
}
}
Run Code Online (Sandbox Code Playgroud)
A级2
public class A {
private static final A instance = new A();
private A(){}
public static A getInstance() {
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
我刚开始学习单例,我看到了两个使用A 1示例和A 2示例的Java示例.A 1级getInstance()是单身吗?我也想知道这两个A类getInstance()方法有什么区别?谢谢