并发容器
并发容器改进了同步容器的性能,通过并发容器来代替同步容器,可以极大地提高伸缩性并降低风险。
整理java.util.concurrent包关于集合的继承结构
1.Map
2.List
3.队列
Java容器主要有哪几类
Collection
1.1.List,有序的集合(可使用索引访问元素),可包含重复元素。
1.2.Set,不可包含重复元素的集合
1.3.Queue,保证多个元素顺序处理的集合(队列)
Map
1.4.Map,用于存储元素对的集合(Key-Value),不允许重复的键。
Java并发容器主要有哪几类
1.1.ConcurrentHashMap,支持并发的映射表,在很多应用场景下可替代同步且基于散列的Map。
1.2.ConcurrentSkipListMap,支持并发的有序映射表,
1.3.ConcurrentSkipListSet,支持并发的有序集
1.4.ConcurrentLinkedQueue,支持并发的非阻塞队列。
1.5.CopyOnWriteArrayList,所有写操作都会对底层数组进行复制,用于在遍历操作为主要操作的情况下代替同步的List。
1.6.CopyOnWriteArraySet
同步容器与并发容器的主要区别
同步容器将所有容器状态的访问都串行化,以实现它们的线程安全性。并发容器通过不同的处理策略如锁分段、CopyOnWrite、引入非阻塞操作来提供更高的并发性和伸缩性。
同步容器也有自身的应用场景
新加入了并发容器并不代表着完全可替代原有的同步容器,并发容器也有不适用的场景。并发容器采用的分段锁机制实现并发场景下高吞吐量,同步容器使用的是独占锁的方式保障并发场景下实例内部数据的线程安全。
例如对采用分段锁实现的并发容器在需要对容器进行独占访问时需要客户端加锁,而这种场景同步容器就有了用武之地。
与Hashtable和synchronizedMap相比,并发容器有着更多的优势和更少的劣势,大多数情况下使用并发容器来代替同步容器能进一步提高代码的可伸缩性。
整理并发容器与同步容器替代关系
需要依据具体的应用场景综合考量。
Map | ConcurrentHashMap |
SortedMap | ConcurrentSkipListMap |
SortedSet | ConcurrentSkipListSet |
List | CopyOnWriteArrayList |
Queue | ConcurrentLinkedQueue |