確保類只有一個實例,并提供一個全局的訪問點熏纯。
創(chuàng)建步驟
- 構(gòu)造函數(shù)私有化
- 類持有一個靜態(tài)實例instance
- 提供一個靜態(tài)方法訪問單例
一個私有的構(gòu)造函數(shù)同诫、一個靜態(tài)變量、一個靜態(tài)方法
創(chuàng)建方法
-
同步創(chuàng)建
優(yōu)點: 簡單
缺點: getInstance()方法只有在第一次創(chuàng)建的時候才需要同步樟澜,在實例化后就不需要同步了误窖,會降低程序性能
public class Singleton{ private static Singleton instance; private Singleton{} public static synchronized Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } }
-
急切實例化
優(yōu)點: 簡單
缺點: JVM在加載類時創(chuàng)建出實例,造成運行負擔秩贰。
public class Singleton{ private static Singleton instance = new Singleton(); private Singleton{} public static Singleton getInstance(){ return instance; } }
-
雙重檢查加鎖
優(yōu)點: 延遲實例化霹俺,減少負擔,同時減少同步時間
缺點: volatile對于java 1.4版本不支持
public class Singleton{ private volatile static Singleton instance; // volatile 保證內(nèi)存可見 private Singleton{} public static Singleton getInstance(){ if(instance == null){ // 檢查一次 synchronized(Singleton.class){ if(instance == null){ // 再檢查一次 instance = new Singleton(); } } } return instance; } }