今天开始学习JUC容器。JUC提供了用于多线程上下文中的Collection实现与高效的、可伸缩的、线程安全的非阻塞FIFO队列。参考JDK1.8,画出下图。
List
JUC容器中List的实现只有CopyOnWriteArrayList。CopyOnWriteArrayList相当于线程安全的ArrayList。
Set
JUC容器中Set的实现有CopyOnWriteArraySet与ConcurrentSkipListSet。CopyOnWriteArraySet相当于线程安全的HashSet,ConcurrentSkipListSet相当于线程安全的TreeSet。当set 大小通常保持很小,只读操作远多于可变操作,需要在遍历期间防止线程间的冲突时,CopyOnWriteArraySet优于同步的HashSet。ConcurrentSkipListSet是一个基于 ConcurrentSkipListMap 的可缩放并发 NavigableSet 实现。set的元素可以根据它们的自然顺序进行排序,也可以根据创建set时所提供的 Comparator 进行排序,具体取决于使用的构造方法。CopyOnWriteArraySet的实现依赖于CopyOnWriteArrayList。ConcurrentSkipListSet的实现依赖于ConcurrentSkipListMap。所以CopyOnWriteArraySet会在CopyOnWriteArrayList之后学习,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并发编程札记-目录