執行緒安全 Singleton 雙重檢查鎖定
這種型別的 Singleton 是執行緒安全的,並且在建立 Singleton 例項後防止不必要的鎖定。
Version >= Java SE 5
public class MySingleton {
// instance of class
private static volatile MySingleton instance = null;
// Private constructor
private MySingleton() {
// Some code for constructing object
}
public static MySingleton getInstance() {
MySingleton result = instance;
//If the instance already exists, no locking is necessary
if(result == null) {
//The singleton instance doesn't exist, lock and check again
synchronized(MySingleton.class) {
result = instance;
if(result == null) {
instance = result = new MySingleton();
}
}
}
return result;
}
}
必須強調的是 - 在 Java SE 5 之前的版本中,上面的實現是不正確的 ,應該避免。在 Java 5 之前,無法在 Java 中正確實現雙重檢查鎖定。