共計 748 個字符,預計需要花費 2 分鐘才能閱讀完成。
在 Java 中,可以通過以下兩種方式來實現單例模式:
- 懶漢式單例模式(Lazy Initialization):
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {if (instance == null) {instance = new Singleton();
}
return instance;
}
}
這種方式在第一次調用 getInstance()
方法時才會創建實例,因此稱之為懶漢式。但是在多線程環境下,多個線程可能同時進入到 instance == null
的判斷中,導致創建多個實例的問題。
為了解決多線程問題,可以對 getInstance()
方法進行加鎖:
public static synchronized Singleton getInstance() {if (instance == null) {instance = new Singleton();
}
return instance;
}
但是這樣會導致每次調用 getInstance()
方法時都需要進行加鎖操作,降低了性能。
- 餓漢式單例模式(Eager Initialization):
public class Singleton {private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {return instance;}
}
在類加載時就創建實例,因此稱之為餓漢式。這種方式不存在多線程問題,但是如果該實例在整個程序的生命周期中很少被使用,會造成內存浪費。
丸趣 TV 網 – 提供最優質的資源集合!
正文完