2019年Java面試-併發容器篇

我將JUC包中的集合類劃分爲3部分來進行說明。在簡單的瞭解JUC包中集合類的框架之後,後面的章節再逐步對各個類進行介紹。

List和Set

Map

Queue


  • 全網唯一一個從0開始幫助Java開發者轉做大數據領域的公衆號~
  • 公衆號大數據技術與架構或者搜索import_bigdata關注,大數據學習路線最新更新,已經有很多小夥伴加入了~


List和Set

JUC(java.util.concurrent)集合包中的List和Set實現類包括:

  • CopyOnWriteArrayList
  • CopyOnWriteArraySet
  • ConcurrentSkipListSet
  • ConcurrentSkipListSet稍後在說明Map時再說明,
  • CopyOnWriteArrayList和CopyOnWriteArraySet的框架如下圖所示:

CopyOnWriteArrayList相當於線程安全的ArrayList,它實現了List接口。CopyOnWriteArrayList是支持高併發的。

CopyOnWriteArraySet相當於線程安全的HashSet,它繼承於AbstractSet類。

CopyOnWriteArraySet內部包含一個CopyOnWriteArrayList對象,它是通過CopyOnWriteArrayList實現的。

Map

JUC集合包中Map的實現類包括: ConcurrentHashMap和ConcurrentSkipListMap。它們的框架如下圖所示:

  • ConcurrentHashMap是線程安全的哈希表(相當於線程安全的HashMap);它繼承於AbstractMap類,並且實現ConcurrentMap接口。ConcurrentHashMap是通過“鎖分段”來實現的,它支持併發。
  • ConcurrentSkipListMap是線程安全的有序的哈希表(相當於線程安全的TreeMap); 它繼承於AbstractMap類,並且實現ConcurrentNavigableMap接口。ConcurrentSkipListMap是通過“跳錶”來實現的,它支持併發。
  • ConcurrentSkipListSet是線程安全的有序的集合(相當於線程安全的TreeSet);它繼承於AbstractSet,並實現了NavigableSet接口。ConcurrentSkipListSet是通過ConcurrentSkipListMap實現的,它也支持併發。

Queue

JUC集合包中Queue的實現類包括: ArrayBlockingQueue, LinkedBlockingQueue, LinkedBlockingDeque, ConcurrentLinkedQueue和ConcurrentLinkedDeque。它們的框架如下圖所示:

  • ArrayBlockingQueue是數組實現的線程安全的有界的阻塞隊列。
  • LinkedBlockingQueue是單向鏈表實現的(指定大小)阻塞隊列,該隊列按 FIFO(先進先出)排序元素。
  • LinkedBlockingDeque是雙向鏈表實現的(指定大小)雙向併發阻塞隊列,該阻塞隊列同時支持FIFO和FILO兩種操作方式。
  • ConcurrentLinkedQueue是單向鏈表實現的無界隊列,該隊列按 FIFO(先進先出)排序元素。
  • ConcurrentLinkedDeque是雙向鏈表實現的無界隊列,該隊列同時支持FIFO和FILO兩種操作方式。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章