單例模式及執行緒安全問題

2021-08-20 01:36:15 字數 1093 閱讀 4690



單例模式是為確保乙個類只有乙個例項,並為整個系統提供乙個全域性訪問點的一種模式方法。

從概念中體現出了單例的一些特點:

(1)在任何情況下,單例類永遠只有乙個例項存在

(2)單例需要有能力為整個系統提供這一唯一例項 

下面是實現**:

package org.mlinge.s02;

public class mysingleton

public static mysingleton getinstance() else

} catch (interruptedexception e)

return instance;

}}

這裡假設在建立例項前有一些準備性的耗時工作要處理,多執行緒呼叫:

package org.mlinge.s02;

public class mythread extends thread

public static void main(string args)

for (int j = 0; j < mts.length; j++)

}}

執行結果如下:

1210420568

1210420568

1935123450

1718900954

1481297610

1863264879

369539795

1210420568

1210420568

602269801

從這裡執行結果可以看出,單例的執行緒安全性並沒有得到保證,那要怎麼解決呢?

package org.mlinge.s03;

public class mysingleton

//public synchronized static mysingleton getinstance() else

}} catch (interruptedexception e)

return instance;

}}

單例模式的執行緒安全問題

單例會帶來什麼問題?如果多個執行緒同時呼叫這個例項,會有執行緒安全的問題 單例一般用在什麼地方?單例的目的是為了保證執行時只有唯一的乙個例項,最常用的地方比如拿到資料庫的連線,或者spring的中建立beanfactory操作,而這些操作都是呼叫他們的方法來執行某個特定的動作。首先先來認識下兩種模式...

單例模式和執行緒安全問題

單例模式是一種常用的軟體設計模式,其定義是單例物件的類只能允許乙個例項存在。許多時候整個系統只需要擁有乙個的全域性物件,這樣有利於我們協調系統整體的行為。比如在某個伺服器程式中,該伺服器的配置資訊存放在乙個檔案中,這些配置資料由乙個單例物件統一讀取,然後服務程序中的其他物件再通過這個單例物件獲取這些...

單例模式的執行緒安全問題

大家都知道單例模式有兩種,分別是懶漢式 餓漢式。但是對於餓漢式,由於判斷例項為null與建立物件的操作並不是乙個原子性操作,故在 普通的懶漢式單例 非執行緒安全問題 1 2 created by ywb 3 4public class singleton 910 public static sing...