并发集合总结


让我们用过思维导图总结一下 JDK 中所有的并发集合。

在 JDK 的并发集合包中,一共有如下 7 个类:

  • ConcurrentHashMap:高并发的HashMap
  • ConcurrentSkipListMap:高并发下的TreeMap(基于跳表实现)
  • ConcurrentSkipListSet:内部使用ConcurrentSkipListMap实现
  • CopyOnWriteArrayList:高并发的ArrayList,适合读场景。
  • CopyOnWriteArraySet:高并发的Set集合,使用CopyOnWriteArrayList实现。
  • ConcurrentLinkedQueue:高并发的链表队列。
  • ConcurrentLinkedDeque:高并发的双向链表队列。

上面 7 个类其实可以分为 4 类:

高并发的HashMap

ConcurrentHashMap 是高并发的 HashMap 实现,其采用数组 + CAS 的方式实现并发控制。比起 JDK 1.7 (数组+segment+锁)的方式有更好的性能,在并发不是特别高的场景下会有更好的效率

高并发的TreeMap

我们普通的 HashMap 是无序的,而 TreeMap 则是 Map 的有序实现。但这两者都不是线程安全的,虽然我们可以通过自己加锁实现线程安全,但很多情况下效率都比较低。于是有了 ConcurrentSkipListMap 的诞生。

ConcurrentSkipListMap 是一个适用于高并发场景下的跳表实现,其实一个有序的 Map 实现,能够实现 log(N) 时间复杂度的查询、插入、删除操作。而 ConcurrentSkipListSet 则是采用 ConcurrentSkipListMap 实现的高并发有序 Set 集合。

高并发的ArrayList

CopyOnWriteArrayList 是高并发下的 ArrayList,其能够实现较高并发的数据读取,适用于读场景频繁的情况。而 ConcurrentSkipListSet 则是使用 CopyOnWriteArrayList 实现的 Set 集合,适用于高并发的数据读场景。

高并发的队列

ConcurrentLinkedQueue 是高并发情况下实现的链表队列,而 ConcurrentLinkedDeque 是高并发情况下实现的双向链表队列。

上次编辑于: 2022/7/30 09:07:48