我试图了解使用Enum创建Singleton对象。 我写了这段代码。这线程安全吗?请告诉我,如果没有,如何做到这一点
public enum MySingleton {
INSTANCE;
private static final Employee emp = Employee.getInstance();
}
public class Employee {
private static Employee emp;
public static Employee getInstance(){
emp=new Employee();
return emp;
}
}
答案 0 :(得分:0)
它不是线程安全的,因为Employee.getInstance()
可以由多个线程调用并返回一个或多个对象。
一个简单的解决方案是将Employee
设为interface
public enum MySingleton implements Employee {
INSTANCE;
}
public interface Employee {
}
这是线程安全的,因为INSTANCE的构造是线程安全的。