執行緒安全的單例模式

2021-07-04 09:03:11 字數 709 閱讀 1017

在我們專案中,很多時候需要程式只存在乙個唯一例項。通常在專案中我會把單例模式寫成如下形式

public class singleton

public static singleton getinstance()

return msingleton;}}

通常以這種形式返回乙個類的唯一例項,然而在android開發中經常如果多執行緒開發。上面這種寫法就不適合在多執行緒模式下執行了,會涉及到執行緒安全問題。因為很有可能兩個執行緒同時會訪問到getinstance()來建立例項。

因此我們使用執行緒同步來避免這一問題:

public class singleton

public static singleton getinstance()

}return msingleton;}}

如果多個執行緒訪問時synchronized關鍵字,會一次只允許乙個執行緒訪問,其他執行緒先等待,恩,這確實避免了多執行緒同時訪問帶來的風險。那麼又出現另乙個問題,假如我專案複雜,執行緒多訪問這個單例時一次只允許乙個執行緒訪問,其他執行緒等待,那效能上又存在很大的問題,每次例項時都得同步鎖。

於是我們使用雙從鎖定,只在第一次類被例項化時判斷 同步鎖,解決執行緒安全,又解決效率問題

public class singleton

public static singleton getinstance() }}

return msingleton;}}

執行緒安全的單例模式

廢話不多說,常用的 積澱下來。一 懶漢模式 即第一次呼叫該類例項的時候才產生乙個新的該類例項,並在以後僅返回此例項。需要用鎖,來保證其執行緒安全性 原因 多個執行緒可能進入判斷是否已經存在例項的if語句,從而non thread safety.使用double check來保證thread safe...

執行緒安全的單例模式

單例模式是為了保證乙個類只有乙個例項而且易於外界訪問。所以一般只有把建構函式,拷貝函式,析構函式,賦值函式,變數名變為私有。再用乙個get函式訪問提供介面即可。考慮執行緒安全就要加鎖。一 懶漢模式 1 靜態成員例項的懶漢模式 class singleton public static singlet...

執行緒安全的單例模式

單例模式是一種比較簡單的模式,確保某乙個類在記憶體中只有乙個例項,而且自行例項化並向整個系統提供這個例項,也就是說在這個系統中這個類只能例項化乙個物件。比如web頁面的計數器。執行緒安全的單例模式 這是先初始化物件,稱為餓漢式 single類一進記憶體,就已經生成物件 執行緒安全的 class si...