Rag*_*har 1 java singleton design-patterns
以下片段是直截了当的,
public MyClass getInstance() {
if(uniqueInstance == null) {
uniqueInstance = new MyClass();
}
return uniqueInstance;
}
Run Code Online (Sandbox Code Playgroud)
以下是什么做的?
public MyClass getInstance() {
if(uniqueInstance == null) {
synchronized(MyClass.class) {
uniqueInstance = new MyClass();
}
}
return uniqueInstance;
}
Run Code Online (Sandbox Code Playgroud)
尝试使其线程安全以防止由至少两个同时进入if块的线程引起的竞争条件是一种不好的尝试.
更安全的方法是添加额外的nullcheck,也称为双重检查锁定.
public MyClass getInstance() {
if (uniqueInstance == null) {
synchronized(MyClass.class) {
if (uniqueInstance == null) {
uniqueInstance = new MyClass();
}
}
}
return uniqueInstance;
}
Run Code Online (Sandbox Code Playgroud)
但是,我通常更喜欢Just Create One模式而不是Singleton.
| 归档时间: |
|
| 查看次数: |
502 次 |
| 最近记录: |