一. 背景
單例模式是指在內存中只會創建且僅創建一次對象的設計模式。在程序中多次使用同一個對象且作用相同時,為了防止頻繁地創建對象使得內存飆升,單例模式可以讓程序僅在內存中創建一個對象,讓所有需要調用的地方都共享這一單例對象。- 引自這篇回答:https://zhuanlan.zhihu.com/p/160842212
另外在學習單例模式的過程中,書上有提到,枚舉類型是線程安全的,再加上其本身就不可以繼承的特性,所以無論是《設計模式》的作者還是很多優秀的開源代碼的實現都采用了枚舉來實現單例設計模式。那么問題來了,為什么枚舉類型是線程安全的呢?
二. 枚舉類型是線程安全的的原因
三. 具體的代碼例子
/**
* 七種單例設計模式模式之:枚舉方式實現V2.0 單例設計模式,
* 采用類似Holder的方式,使其可以實現lazy load。
*/
public class Singleton {
private byte[] data = new byte[1024];
private Singleton() {
}
private enum EnumHolder {
INSTANCE;
private Singleton instance;
EnumHolder() {
this.instance = new Singleton();
}
public Singleton getSingleton() {
return instance;
}
}
public static Singleton getInstance() {
return EnumHolder.INSTANCE.instance;
}
}
//代碼出自《Java高并發編程詳解:多線程與架構設計(汪文君 著)》第14章