我有一個我想通過創建一個靜態實例來作爲單例使用的類。當然,我也希望它是線程安全的。通過使用私有靜態方法使單體線程安全嗎?
假設我沒有共享任何私人數據。但是如果我沒有弄錯,仍然存在一個問題,即在調用靜態對象實例的方法時,方法內的變量會在線程間共享,並且會產生不可預知的結果。
但是,調用真正的靜態方法時,將創建一個新的堆棧幀,所以它是線程安全的(你們自己)呢。再次,如果我沒有錯。
請問這個模式單身是線程安全的?
class Singleton
{
public object SomeMethod(object arg) {
return Singleton.SomeMethodImpl(arg);
}
private static object SomeMethodImpl(object arg) {
// is in unique stack frame?
object Result;
...
return Result;
}
}
如果你想知道爲什麼我不只是擺在首位創建一個靜態類 - 我需要有一個基於在接口上單,並有不同的實現,作爲戰略的一部分模式。這對靜態類不起作用。
我會看看:http://www.dofactory.com/Patterns/PatternSingleton.aspx如果你想要一個關於如何創建一個單例的一個很好的例子。 –
只是撇去它。良好的信息 - 書籤。對於我的目的,我不認爲我需要擔心鎖定,因爲我沒有訪問類中的任何共享數據。 –