多執行緒 三 安全發布物件和單例模式舉例

2021-08-26 02:53:32 字數 974 閱讀 6916

發布物件:    使乙個物件能夠被當前範圍之外的**所使用

物件逸出:    一種錯誤的發布.當乙個物件還沒有構造完成時,就使它被其它執行緒所見.

安全發布物件4種方法:

1.在靜態初始化函式中初始化乙個物件引用.

2.將物件的引用儲存到volatile型別域或者atomicreference物件中.

3.將物件的引用儲存到某個正確構造物件的final型別域中.

4.將物件的引用儲存到乙個有鎖保護的域中.

單例模式

1.懶漢模式

單例例項在第一次使用時進行建立

這種寫法在單執行緒環境下沒問題的,但是在多執行緒環境下會出現問題.執行緒不安全

原因是如果有多條執行緒同時訪問的話,可能會被呼叫兩次,那麼兩條執行緒拿到的例項是不一樣的

懶漢模式改造為執行緒安全

①.只要把工廠方法加上synchronized修飾就可以,這樣就保證這個方法在同一時間內只能被一條執行緒所執行,即保證了執行緒安全.但是並不推薦,因為也帶來了效能問題.

②.用雙重檢測機制+volatile,改造為執行緒安全

2.餓漢模式

單例例項在類裝載的時候進行建立,可以保證執行緒的安全

但是,如果構造方法中存在過多的處理,會導致類載入的時候特別慢,可能引起效率問題.

3.列舉模式(最安全的)

最推薦的這種模式

執行緒之安全發布物件 單例模式

單例模式 保證獲取到的物件是同乙個物件,物件只例項化一次 特點 單例類的構造方法是private 有乙個靜態方法getinstance獲取單例例項 兩大類 懶漢式與餓漢式 懶漢 在需要單例物件時,手動呼叫getinstance方法時,才會執行第一次建立 餓漢 預設就建立好乙個單例物件,不需要手動呼叫...

多執行緒安全單例模式

在文章開始之前我們還是有必要介紹一下什麼是單例模式。單例模式是為確保乙個類只有乙個例項,並為整個系統提供乙個全域性訪問點的一種模式方法。從概念中體現出了單例的一些特點 1 在任何情況下,單例類永遠只有乙個例項存在 2 單例需要有能力為整個系統提供這一唯一例項 1.全域性變數的缺點 必須在程式一開始就...

c 多執行緒單例模式 執行緒安全C 單例模式

我對此處記錄的單例模式有一些疑問 http us library ff650316.aspx 以下 摘自該文章 using system public sealed class singleton private static volatile singleton instance private ...