Collection、ArrayList、HashMap、HashSet轉為執行緒安全(集合的安全性問題)
阿新 • • 發佈:2018-12-10
最近在看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 關鍵字。