以下代码很简单,
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
块的线程引起的争用情况是一种糟糕的尝试。
一种更安全的方法是添加额外的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而不是Singleton。
关于java - 单例模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4357538/