接着上篇文章给出的Java在JDK1.2之后在java.util包中给出的集合类/容器类以及数组的应用整理。也考虑和讨论了并发一致性的问题。
?
其实在高并发的情况下,仅仅靠java.util包中提供的最基本的容器往往不能满足具体应用场景的需求。
?
在JavaSE5之后,也就是JDK1.5出来之后,在java.util.concurrent包中又提供了很多并发场景下方便使用的容器/集合工具类。这其中包括CopyOnWriteArrayList、CopyOnWriteArraySet、ConcurrentHashMap、ConcurrentLinkedQueue、BlockingQueue等。
?
在CopyOnWriteArrayList中为了保证数据一致性,每当有新的改变的时候,会利用写时拷贝(Copy On Write),复制出一份新的List出来。而已经使用旧的拷贝的引用的,还会继续使用旧的。
?
同时为了保证并发情况下的执行效率,像ConcurrentHashMap中还用到了Segment进行分段,减小了锁粒度,提高了并发性。
?
BlockingQueue及其具体的各种实现类,则保证了队列为空时消费者的阻塞和队列为满时生产者的阻塞,在“生产者-消费者”模式下得到了广泛的应用。
?
ConcurrentLinkedQueue是旨在大并发量情况下,维持队列的基本功能,保持性能的工具类。
?
接着上篇,在本人的小站上,对Java的并发容器类/集合类进行了一些分析和整理,包括用法要点和源码分析。下面列表中的文章主要是考虑并发的情况下,对java.util.concurrent包中的容器类/集合类工具的分析整理:
?
欢迎大家阅读并拍砖,谢谢!