1. 程式人生 > >Collection、ArrayList、HashMap、HashSet轉為執行緒安全(集合的安全性問題)

Collection、ArrayList、HashMap、HashSet轉為執行緒安全(集合的安全性問題)

最近在看bugly的是否,發現二維碼掃描程式碼中有一段報錯了,執行緒不安全問題.

  裡面有段 new HashSet() 程式碼,這個HashSet,底層是採用HashMap來實現的,執行緒不是安全的, 所以有時候會有執行緒不安全的問題產生.

前言:Collection、ArrayList、HashMap、HashSet都是非同步的,執行緒不安全的

在集合中 Vector 和 HashTable 倒是執行緒安全的,開啟原始碼會發現其實就是把各自核心方法新增上了synchronized 關鍵字。

轉換方法:

Collections 工具類提供了相關的 API,可以讓上面那 3 個不安全的集合變為安全的:

1. // Collections.synchronizedCollection(collection)

2. // Collections.synchronizedList(list)

3. // Collections.synchronizedMap(map)

4. // Collections.synchronizedSet(set)

上面幾個函式都有對應的返回值型別,傳入什麼型別返回什麼型別。開啟原始碼其實實現原理非常簡單,就是將集 合的核心方法新增上了 synchronized 關鍵字。