2019年Java面試-併發容器篇

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

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兩種操做方式。
相關文章
相關標籤/搜索