高性能編程——併發容器類list_set_queue

list

ArrayList

線性表,最常用的是ArrayList,其底層是數組。這個再我一篇集合框架的文章裏有詳解,可以自己去看看。

CopyOnWriteList

相當於加了讀寫鎖的ArrayList,適用於讀多寫少的場景。寫鎖被佔用的時候,大量的讀線程就會被阻塞,會很大的影響效率。當去寫數組的時候會Arrays.copy,就會使array數組的引用指向新的數組,因爲加了鎖,所以是不會出現髒數據的:
在這裏插入圖片描述
就像上圖中就是擴容的情形,寫鎖保證了數據的原子性。當然上述代碼也有很大的問題,就是如果短時間寫操作太多,創建了太多數組,在GC執行不到位的情況下很有可能就會內存溢出。

Set

Set就是不重複的集合。幾個重要的實現有:
在這裏插入圖片描述

HashSet

HashSet其實就是HashMap的key,它的空構造函數就是:

private tranasient HashMap<E,Object> map;
......
public HashSet() {
	map = new HashMap<>{};
}

其實去put的時候就是map 去執行了一次map.put(key,PRESENT),PRESENT是上面定義的一個new Object();僅做填充用途。

CopyOnWriteArraySet

CopyOnWriteArraySet主要靠CopyOnWriteArrayList來實現,所以它是線程安全的。

Queue

隊列是很基本的數據結構,下面是它常用的API。
在這裏插入圖片描述

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