2集合和同步容器歸類

list
arraylist 數組
linkedList 雙向鏈表(堆棧和隊列都可以使用)
ArrayDeque 循環數組(堆棧和隊列都可以使用,優先於linkedList)
vectory  同步容器,數組
Stack  extends vectory 堆棧
Collections.synchronizedList(arraylist)同步容器
Collections.synchronizedList(linkedList)同步容器
Collections.synchronizedList(ArrayDeque)同步容器

set
hashset 哈希表結構(數組和單向鏈表)
linkedhashset 哈希表結構外加雙向鏈表(數組和單向鏈表雙向鏈表(雙向鏈表保持插入的順序))
treeset 紅黑樹結構 可以排序
Collections.synchronizedSet(hashset)同步容器
Collections.synchronizedSet(linkedhashset)同步容器
Collections.synchronizedSortedSet(treeset)同步容器


map
hashmap哈希表結構(數組和單向鏈表)
treemap紅黑樹結構 可以排序
linkedhashmap哈希表結構外加雙向鏈表(數組和單向鏈表和雙向鏈表(雙向鏈表保持插入的順序))
hashtable哈希表結構(數組和單向鏈表)同步容器
WeakHashMap的鍵對象爲弱引用
Collections.synchronizedMap(hashmap)同步容器
Collections.synchronizedMap(linkhashmap)同步容器
Collections.synchronizedMap(WeakHashMap)同步容器

Collections.synchronizedSortedMap(treemap)同步容器


同步容器一般是在方法上加鎖,所以鎖的this

List lista = Collections.synchronizedxxx(xxx)

這種同步容器鎖的是lista;這種同步容器也可以指定鎖,在靜態方法中


同步容器是雖然是線程安全的,但是複合操作我們依然需要加鎖

例如,1.缺少在加入 2.當我們迭代的時候,其他線程又修改了數據

同步容器可能會包的錯誤:1.數組越界,一個線程刪除數組的某一個座標,另外一個線程獲取這個座標,就會越界

2.一個線程在迭代的時候,假如計數器被另一個線程修改了,就會報錯concurrentModifcationException錯誤 及時失敗“fail-fast”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章