前言

之前我们学习过了集合,并发编程,现在我们来学习并发容器,在并发编程中,经常听到Java集合类,同步容器,并发容器,那么他们之间有哪些分类,优劣呢,我们先把这个框架给分清楚了,这样后面学习的时候不会乱。

集合容器

大家熟知的集合类ArrayList,LinkedList,HashMap这些容器这些容器都是非线程安全的,如果多个线程并发访问这些容器时,会出现问题。因此,在编写程序时,如果是在多线程环境下,必需要求程序员手动地在任何访问到这些容器的地方进行同步处理,但是这样使用起来十分麻烦。

同步容器

基于集合容器出现的问题,Java给用户提供了同步容器。

可以简单理解为通过synchronized来实现同步的容器。主要分类为:

1.Vector

2.Stack

3.HashTable

4.Collections.synchronized方法生成

举个例子:


并发容器 线程池执行一定线程安全 并发容器有哪些_并发容器


我们可以看到,这些容器实现线程安全的方式就是将它们的封装起来,并在需要同步的方法上添加关键字synchronized。

只是,这样做的代价是削弱了并发性,当多个线程共同竞争容器级的锁时,吞吐量就会降低。

并发容器

为了解决同步容器的性能问题,并发容器出现了。
Java.util.concurrent包下提供了多种并发容器。
并发容器是专门针对多线程并发设计的,使用了锁分段技术,只对操作的位置进行同步操作,其他没有操作的位置可以被其他线程访问,提高了程序的吞吐量。
采用了CAS算法和部分代码使用synchronized锁保证线程安全。

综上来说:
1.单线程中操作普通容器时,代码都是串行执行,同一时刻只能put或get一个数据到容器中
2.多线程中操作同步容器时,多个线程排队去执行,同一时刻也是只能put或get一个数据到同步容器中
3.在多线程中操作并发容器时,可以多个线程同时去执行,同一时刻可以有多个线程去put或get多个数据到并发容器中

结构上来说呢JUC安全集合有三大类:Blocking类,CopyOnWrite类,Concurrent类,后面我们会对每个类里面重点的集合进行分析。