單例(Singleton)模式

2022-08-12 13:18:14 字數 1079 閱讀 4020

最簡單的單例「餓漢式」

public class singleton

public static singleton getinstance()
//other methods

}

出於效能等方面的考慮,希望延遲例項化單例物件(static 屬性在載入類時會被初始化),方案二應運而生,稱之為「懶漢式」

public class singleton
public static singleton getinstance() 

return instance;

}

}

不幸的是,在高併發的環境中,getinstance()方法返回了多個指向不同的該類例項,也就是說:執行緒不安全。

執行緒安全寫法a

public class singleton
public static synchronized singleton getinstance() 

return instance;

}

}
方案a中雖然實現了多執行緒的安全訪問,但在多執行緒高併發訪問情況下,加上 synchronized關鍵字會使得效能大不如前。
執行緒安全寫法b

public class singleton
public static synchronized singleton getinstance() } }

return instance;

}

}

方案b,我們稱之為 double-checked locking (雙重檢查加鎖)模式。在此方案中,還是使用 synchronized,只不過這次只是保證例項化的這段邏輯被乙個執行緒執行。

前述的方法都存在小小的缺陷,有沒有一種既能實現延遲載入,又能實現執行緒安全的方案呢

終極方案

public class singleton

private static class lazyholder

public static singleton getinstance()

}

Singleton 單例 模式

singleton 模式的宗旨在於確保某個類只有乙個例項,別且為之提供乙個全域性訪問點。為了防止其他工作人員例項化我們的類,可以為該類建立唯一乙個構造器,並將構造器的可見 設定為私有。值得注意的是,如果我們建立了其他的非私有的構造器,或者根本沒有為該類提 供構造器,那麼其他人員還是能例項化我們的類。...

Singleton 單例 模式

今天看了,單例模式。感覺他的本質就是,控制類例項的個數。特例就是,控制static變數的唯一性,保證各個程式共享著同一例項。乙個例子 package singleton description 這是乙個單例模式的使用demo author kyle goal 實現乙個類僅有乙個例項 singleto...

單例(Singleton)模式

單例模式的特點 singleton模式包含的角色只有乙個,那就是singleton。singleton擁有乙個私有建構函式,確保使用者無法通過new取得singleton的例項。除此之外,該模式中包含乙個靜態私有成員變數instance與靜態公有方法instance。instance方法負責檢驗並例...