我不确定,之前是否有人问过这个问题(如果是这样道歉)。
从维基百科复制的代码。
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
它是如何线程安全的?是(仅)因为此类中没有变异状态吗?
如果我这样修改会发生什么
public class Singleton {
private static final Singleton instance = new Singleton();
private FancyClass obj1;
private FancyClass obj2;
//feel free to imagine all the getters and setters for obj1 and obj2,
// like getObj1() and so forth
//tricky method
public void doSomething() {
obj1.destroyEnemy();
obj2.destroyFriend();
}
private Singleton() {
obj1 = null;
obj2 = null;
}
public static Singleton getInstance() {
return instance;
}
}
我对设计模式讨论没有兴趣,这是我应该维护的那种代码。上面的“单例”线程是安全的,假设 FancyClass 是 java 标准库类。