單例模式執行緒安全嗎《十二》

2021-09-10 09:14:01 字數 1410 閱讀 7629

單例模式執行緒安全嗎?

單例模式作為一種常見的設計模式,在程式中非常常見,主要是為了保證乙個類只有乙個唯一的物件。

從簡單的「餓漢式」、「懶漢式」→利用 synchronized 和 複雜的「雙重校驗dcl模式」,是乙個考慮執行緒安全的過程

那麼單例模式執行緒安全嗎

1. 靜態的餓漢式單例模式是執行緒安全的

那非靜態的餓漢單例模式呢?

答案是:沒有非靜態的餓漢單例模式

// 執行緒安全

public class ehanmonitor

public static ehanmonitor getehanmonitor(

)}

2. 在方法前面加synchronized的懶漢單例模式是執行緒安全的,但是效率低
//執行緒安全

public class singleton2

private static singleton2 instance;

public static synchronized singleton2 getinstance(

) return instance;

}}

3. 雙重校驗dcl模式的懶漢單例模式不是執行緒安全的
//不是執行緒安全

public class monitor

public static monitor getmonitor(

) }

}return monitor ;

}

因為下面的2,3步驟會重排序

mem = allocate();

//為單例物件分配記憶體空間.

instance = mem;

//注意,instance 引用現在是非空,但還未初始化

ctorsingleton(instance)

;//為單例物件通過instance呼叫建構函式

4. 雙重校驗的volatile dcl模式是執行緒安全的

新增volatile 可以禁止2,3步驟的重排序

//執行緒安全

public class monitor

public static monitor getmonitor(

) }

}return monitor ;

}

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

public class classmonitor

private classmonitor(

) public static classmonitor getinstance(

)

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

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

設計模式 單例模式(執行緒安全)

前言 單例模式是設計模式中比較簡單的一種,但是又因為簡單常見在面試中又是經常出現的乙個設計模式。所以必須要會啊。之前也只是會寫執行緒不安全的單例模式。單例模式 乙個類能返回物件乙個引用 永遠是同乙個 和乙個獲得該例項的方法 必須是靜態方法,通常使用getinstance這個名稱 當我們呼叫這個方法時...

執行緒安全的單例模式

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