單例模式執行緒安全嗎?
單例模式作為一種常見的設計模式,在程式中非常常見,主要是為了保證乙個類只有乙個唯一的物件。
從簡單的「餓漢式」、「懶漢式」→利用 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...