單例模式——執行緒安全的兩種實現
單例模式——執行緒安全的兩種實現
一、雙重檢查鎖定(double-checked locking)
public class SingleTon {
// 靜態例項變數加上volatile
private static volatile SingleTon instance;
// 私有化建構函式
private SingleTon() {}
// 雙重檢查鎖
public static SingleTon getInstance() {
if (instance == null) {
synchronized(SingleTon.class){
if(instance == null){
instance = new SingleTon();
}
}
}
return instance;
}
}
- 推薦使用懶漢式寫法,即延遲載入,當需要用到例項的時候,才去初始化(new)此例項。但在併發環境下,一重判斷,即判斷一次instance為null,是不行的,併發環境下如果同時多個執行緒進入方法體就不能保證單例了,因此衍生了雙重檢查鎖定的實現。
二、靜態內部類實現 單例模式
public class SingleTon {
// 私有化建構函式
private SingleTon() {}
// 利用靜態內部類特性實現外部類的單例
private static class SingleTonBuilder {
private static SingleTon singleTon = new SingleTon();
}
public static SingleTon getInstance() {
return SingleTonBuilder.singleTon;
}
public static void main(String[] args) {
SingleTon instance = SingleTon.getInstance();
}
}
靜態內部類實現單例模式,主要原理為:Java中靜態內部類可以訪問其外部類的靜態成員屬性,同時,靜態內部類只有當被呼叫的時候才開始首次被載入,利用了classloader的機制來保證初始化instance時只有一個執行緒,所以也是執行緒安全的,同時沒有效能損耗(加synchronized同步鎖),這種實現更推薦。
相關文章
- 【設計模式】實現執行緒安全單例模式的五種方式設計模式執行緒單例
- 執行緒安全的單例模式執行緒單例模式
- ios中的執行緒安全單例實現iOS執行緒單例
- C++ 執行緒安全的單例模式C++執行緒單例模式
- singleton模式四種執行緒安全的實現模式執行緒
- 多執行緒安全的單例模式(使用判斷nullptr和call_once兩種方法)執行緒單例模式Null
- 設計模式之單例模式(執行緒安全)設計模式單例執行緒
- 靜態內部類實現的單例模式是執行緒安全的單例模式執行緒
- 你的單例模式真的是執行緒安全的嗎?單例模式執行緒
- python 執行緒安全的 單例 實現 日誌分級Python執行緒單例
- C++實現一個執行緒安全的單例工廠C++執行緒單例
- Map實現執行緒安全的3種方式執行緒
- 關於多執行緒的兩種實現方式執行緒
- ios-UI高階多執行緒 GCD實現單例模式iOSUI執行緒GC單例模式
- 如何看待Spring下單例模式與執行緒安全的矛盾Spring單例模式執行緒
- JAVA_多執行緒_單例模式Java執行緒單例模式
- 不使用synchronized和lock,如何實現一個執行緒安全的單例?synchronized執行緒單例
- 單例模式的各種實現單例模式
- 單利模式的兩種最佳實現模式
- C++ 靜態變數單例模式的誤會(執行緒安全)C++變數單例模式執行緒
- 【Python】python 多執行緒兩種實現方式Python執行緒
- 單例模式(上)—如何優雅地保證執行緒安全問題單例模式執行緒
- 單例模式(上)---如何優雅地保證執行緒安全問題單例模式執行緒
- java多執行緒結合單例模式例項,簡單實用易理解Java執行緒單例模式
- Java中實現執行緒安全HashSet的幾種方法 | baeldungJava執行緒
- 單例模式:5種實現方式單例模式
- 單例模式(含執行緒鎖關鍵字)單例模式執行緒
- Java執行緒安全實現懶初始化兩個方式Java執行緒
- JS實現單例模式的多種方案JS單例模式
- Java 實現單例模式的 9 種方法Java單例模式
- 單例模式的各種實現方式(Java)單例模式Java
- Java中確保執行緒安全最常用的兩種方式Java執行緒
- 單例模式中可能存在的一些問題(執行緒安全問題)單例模式執行緒
- 多執行緒的三種實現方式及靜態代理模式執行緒模式
- 【java】【多執行緒】建立執行緒的兩種常用方式(2)Java執行緒
- java執行緒建立的兩種方式Java執行緒
- 單例模式常用的的兩種寫法單例模式
- iOS多執行緒安全-13種執行緒鎖?iOS執行緒