欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java 單例模式 懶漢式 和餓漢試

錢斌斌2年前8瀏覽0評論

在Java開發中,單例模式是常見的一種設計模式,它可以保證一個類只有一個實例,并且提供了一個全局的訪問點。在單例模式中,懶漢式和餓漢式是兩種常見的實現方式。

懶漢式

public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {}
public static synchronized LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}

懶漢式是在第一次使用時才會實例化對象,它的優點是節省了內存空間,但缺點是可能存在線程安全問題。在多線程的情況下,可能會出現多個線程同時訪問getInstance()方法,導致重復實例化對象。

餓漢式

public class EagerSingleton {
private static final EagerSingleton instance = new EagerSingleton();
private EagerSingleton() {}
public static EagerSingleton getInstance() {
return instance;
}
}

餓漢式是在類加載時就已經實例化對象,它的優點是不存在線程安全問題,但缺點是可能造成內存浪費。如果該對象很長時間內沒有被使用,那么就會一直占據內存空間。

因此,選擇懶漢式還是餓漢式需要根據具體的情況進行考慮,鑒于懶漢式可能存在線程安全問題,可以采用雙重檢驗鎖的方式來保證線程安全,代碼如下:

public class DoubleCheckSingleton {
private volatile static DoubleCheckSingleton instance;
private DoubleCheckSingleton() {}
public static DoubleCheckSingleton getInstance() {
if (instance == null) {
synchronized (DoubleCheckSingleton.class) {
if (instance == null) {
instance = new DoubleCheckSingleton();
}
}
}
return instance;
}
}

雙重檢驗鎖模式可以在保證線程安全的同時,盡可能地減少了鎖的使用,提高了性能。