下面的片段很简单,
public MyClass getInstance() {
if(uniqueInstance == null) {
uniqueInstance = new MyClass();
}
return uniqueInstance;
}
下面这个是做什么的?
public MyClass getInstance() {
if(uniqueInstance == null) {
synchronized(MyClass.class) {
uniqueInstance = new MyClass();
}
}
return uniqueInstance;
}
最佳答案
为了防止至少两个同时进入 if
block 的线程引起的竞争条件,这是一个糟糕的线程安全尝试。
更安全的方法是添加一个额外的 nullcheck,也称为 double-checked locking .
public MyClass getInstance() {
if (uniqueInstance == null) {
synchronized(MyClass.class) {
if (uniqueInstance == null) {
uniqueInstance = new MyClass();
}
}
}
return uniqueInstance;
}
不过,我通常更喜欢Just Create One pattern超越单例。
关于java - 单例模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4357538/