執行緒安全的單例模式

2022-09-20 15:00:14 字數 1129 閱讀 1694

單例模式是最簡單的設計模式,但是使用時要注意執行緒安全問題,以下是單例模式的幾種寫法,比較好的方法是基於類初始化的方式,既能實現執行緒安全,又可以實現延遲載入。餓漢模式可實現執行緒安全,但是效率可能會出現問題。還應注意雙重鎖的檢測,由於指令重排並不能保證執行緒安全

一.餓漢式:

public class singleton//必須是private 的,保證使用者不能手動new 乙個例項

public singleton getinstance()

}//執行緒安全,因為static 的變數乙個類只有乙份

二.懶漢式:

1.public class singleton

public static singleton getinstance()

}第一種方法適用於單執行緒,非執行緒安全。 static關鍵字的用法,使用static關鍵字修飾的變數只有在第一次使用的時候才會被初始化,而且乙個類裡面static的成員變數只會有乙份,這樣就保證了無論多少個執行緒同時訪問,所拿到的resource物件都是同乙個。

2.public class singleton

public static synchronized singleton getinstance()

} 第二種方法執行緒安全,但是鎖粒度過大,執行效率低

3.public class singleton()

public static singleton getinstance()

return instance;}}

第三種方法降低了鎖的粒度,採用了雙重鎖檢測的方式,但是由於指令重排的存在,所以非執行緒安全

有資料依賴性的兩個操作不會被重排序,但是當這兩個操作在不同的線城時,資料依賴性不被考慮

4.public  class singleton

public static singleton getinstance()

}return instance;               }}

第四種方法用volatile來修飾instance,volatile的作用:保證記憶體可見性,防止指令重排

5.public class instancefactory

public static getinstance()

static instance()

}

執行緒安全的單例模式

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

執行緒安全的單例模式

單例模式是為了保證乙個類只有乙個例項而且易於外界訪問。所以一般只有把建構函式,拷貝函式,析構函式,賦值函式,變數名變為私有。再用乙個get函式訪問提供介面即可。考慮執行緒安全就要加鎖。一 懶漢模式 1 靜態成員例項的懶漢模式 class singleton public static singlet...

執行緒安全的單例模式

在我們專案中,很多時候需要程式只存在乙個唯一例項。通常在專案中我會把單例模式寫成如下形式 public class singleton public static singleton getinstance return msingleton 通常以這種形式返回乙個類的唯一例項,然而在android...