單件模式確保一個類只有一個實例,並提供一個全局訪問點。
以下爲使用“雙重檢查加鎖“,在getInstance()中減少使用同步的單件模式代碼
public class Singleton()
{
//構造器聲明爲私有的,只有自Singleton類內纔可以調用構造器
private Singleton() {}
//用靜態方法實例化對象,並返回這個實例對象
public static Singleton getInstance() {
if(uniqueInstance == null)
{ /*只有當我們第一次需要這個實例時,纔會執行
if語句塊中的語句,這就是“延遲實例化”(lazy instantiaze) */
synchronized(Singleton.class)
{
//同步後,再檢查一遍,如果仍是null,才初始化
if (uniqueInstance == null)
{
uniqueInstance = new Singleton();
}
}
}
return uniqueInstance;
}
//其他方法
//靜態變量來記錄Singleton類的唯一實例
/*volatile關鍵詞確保:當uniqueInstance變量被初始化成
Singleton實例時,多個線程正確地處理uniqueInstance變量 */
private volatile static Singleton uniqueInstance;
//其他變量
}