正在学习这一章,对看过的资料进行了总结。
来源:http://ifeve.com/concurrent-collections-1/
1. Java的集合框架
集合类主要负责保存数据,因此集合类也被称为容器类。Java容器类的用途是”保存对象”,并将其划分为两个不同的概念:
(1)Collection
一组”对立”的元素,通常这些元素都服从某种规则
1) List必须保持元素特定的顺序
2) Set不能有重复元素
3) Queue保持一个队列(先进先出)的顺序
(2)Map
一组成对的”键值对”对象
2. 并发集合
当需要在并发程序中使用数据集合时,必须十分小心的选择实现。大多数集合数并不适合用在并发应用程序中,因为它们没有控制并发访问数据。如果一些并发任务共享一个数据结构,而这个数据结构并不适合用在并发任务中,将会有数据不一致的错误,这将影响到程序的正确运行。
为了处理多线程并发安全问题,Java5在java.util.concurrent包下提供了支持多线程并发的集合类。
常用的并发集合类
扫描二维码关注公众号,回复:
4616685 查看本文章
- 阻塞集合:这种集合包括添加和删除数据的操作。如果操作不能立即进行,是因为集合已满或者为空,该程序将被阻塞,直到操作可以进行。
- 非阻塞集合:这种集合也包括添加和删除数据的操作。如果操作不能立即进行,这个操作将返回null值或抛出异常,但该线程将不会阻塞。
- ConcurrentHashMap:线程安全的HashMap的实现
- CopyOnWriteArrayList:线程安全且在读操作时无锁的ArrayList
- CopyOnWriteArraySet:基于CopyOnWriteArrayList,不添加重复元素
- ArrayBlockingQueue:基于数组、先进先出、线程安全,可实现指定时间的阻塞读写,并且容量可以限制
- LinkedBlockingQueue:基于链表实现,读写各用一把锁,在高并发读写操作都多的情况下,性能优于ArrayBlockingQueue
3. 具体的使用
(1)BlockingQueue
以下博文介绍的非常详细:
BlockingQueue家庭成员:
(2)ConcurrentHashMap