Java并发编程札记-(五)JUC容器-01概述

来源:互联网 发布:傅园慧网络直播完整版 编辑:程序博客网 时间:2024/04/20 10:52

今天开始学习JUC容器。JUC提供了用于多线程上下文中的Collection实现与高效的、可伸缩的、线程安全的非阻塞FIFO队列。参考JDK1.8,画出下图。

MarkdownPhotos/master/CSDNBlogs/concurrency/0201/atomic.png

List

JUC容器中List的实现只有CopyOnWriteArrayList。CopyOnWriteArrayList相当于线程安全的ArrayList。当期望的读数远远大于列表的更新数时, CopyOnWriteArrayList优于同步的ArrayList。

Set

JUC容器中Set的实现只有CopyOnWriteArraySet与ConcurrentSkipListSet。相当于线程安全的HashSet。当set 大小通常保持很小,只读操作远多于可变操作,需要在遍历期间防止线程间的冲突时,CopyOnWriteArraySet优于同步的HashSet。ConcurrentSkipListSet是一个基于 ConcurrentSkipListMap 的可缩放并发 NavigableSet 实现。set的元素可以根据它们的自然顺序进行排序,也可以根据创建set时所提供的 Comparator 进行排序,具体取决于使用的构造方法。CopyOnWriteArraySet的实现依赖于CopyOnWriteArrayList。ConcurrentSkipListSet的实现依赖于ConcurrentSkipListMap。所以ConcurrentSkipListSet会在ConcurrentSkipListMap之后学习。

Map

JUC容器中Map的实现只有ConcurrentHashMap和ConcurrentSkipListMap。
ConcurrentHashMap是线程安全的哈希表,相当于线程安全的HashMap。ConcurrentSkipListMap是线程安全的有序的哈希表,相当于线程安全的TreeMap。

Queue

JUC容器中Queue的常用实现有ArrayBlockingQueue, LinkedBlockingQueue, LinkedBlockingDeque, ConcurrentLinkedDeque和ConcurrentLinkedQueue。

  • ArrayBlockingQueue是一个由基于数组的、线程安全的、有界阻塞队列。
  • LinkedBlockingQueue是一个基于单向链表的、可指定大小的阻塞队列。
  • LinkedBlockingDeque是一个基于单向链表的、可指定大小的双端阻塞队列。
  • ConcurrentLinkedDeque是一个基于双向链表的、无界的队列。
  • ConcurrentLinkedQueue是一个基于单向链表的、无界的队列。

本文就讲到这里,想了解Java并发编程更多内容请参考:

  • Java并发编程札记-目录
阅读全文
1 0
原创粉丝点击