實現執行緒安全單例模式的兩種方法

2021-10-25 03:27:03 字數 937 閱讀 5498

實現單例模式注意點:既然不能通過構造方法建立例項,那麼必須通過乙個get方法來獲得,那麼這個get方法必須是靜態的方法,否則這個例項只能通過反射建立了。

public

class

singleton

public

static singleton getinstance()

return instance;

}}

分析:顯然這是乙個單例模式的實現,但是它執行緒不安全,測試一下,用10個執行緒呼叫getinstance方法,結果在這次測試中產生了3個singleton物件:

那麼怎麼解決呢?

同步鎖可以加在哪些位置呢:

get方法上:讓get方法變成同步方法,但是我們的目的其實只是想鎖住單例資源,把整個方法鎖住的話,雖然簡單粗暴,但是太笨重了

雙重檢查法+同步鎖:因為單重判斷要麼不能解決執行緒安全問題,要麼每次都會有加鎖的行為,使整個方法變重。

public

class

singleton

public

static singleton getinstance()

}}return instance;

}}

public

class

singleton

//靜態內部類實現執行緒安全的單例模式

private

static

class

singletonholder

public

static singleton getinstance()

}

單例設計模式的兩種方法

第一種 public class singletontest class singleton public static singleton getinstance 第二種 public class singletontest class singleton public static single...

java 建立單例的兩種方法

1 看了載入框架 glide 3.7.0版 原始碼,發現glide 也是使用volatile 關鍵字的雙重校驗實現的單例,可見這種方法是值得信賴的。package com publicclassperson publicstaticperson getinstance returnperson 2 ...

執行緒安全的單例模式的幾種實現方法

單例模式分為餓漢模式 在單例類定義時就會進行例項化 和懶漢模式 只要到需要用到類的時候才會進行例項化 特點 訪問量較少時使用懶漢模式,以時間換空間 訪問量較大時 或者訪問的執行緒較多時需要使用餓漢模式,以空間換時間 實現單例模式的key point 1 執行緒安全 2 建構函式宣告為private ...