02-简介
7.1 简介
数据结构是编程的基本元素。几乎每个程序都使用一种或多种类型的数据结构来存储和管理数据。Java API提供了 Java集合框架 。它包含实现许多不同数据结构的接口、类和算法。
当需要在并发程序中使用集合框架时,开发者必须非常谨慎地对待其对应的实现。大部分集合类并不会在并发应用中正常工作,因为它们不能控制对其数据的并发访问。如果并发任务共享了一个不可以与另一个并发任务一起工作的数据结构,则可能会出现数据不一致的错误。这种数据结构的一个例子是 ArrayList
类。
Java提供的数据集合过程可以在并发程序中使用,且不会出现任何问题或不一致现象。基本上,Java提供了如下两种用于并发应用程序的集合。
- 阻塞集合: 这种集合包含了添加和删除数据操作。如果这些操作不可以立即完成的原因是集合为满集或者空集,则线程将会阻塞直到操作可以完成。
- 非阻塞集合: 这种集合也包含添加和删除数据操作。但是在这种条件下,如果那些操作不可以立即完成,则它会返回一个
null
值或者抛出一个异常,线程将不会阻塞在那里。
本章将介绍如何在并发应用中使用一些Java集合框架。
- 运用
ConcurrentLinkedDeque
类的非阻塞双端队列 - 运用
LinkedBlockingDeque
类的阻塞双端队列 - 运用
LinkedTransferQueue
类的用于生产者和消费者数据的阻塞队列 - 运用
PriorityBlockingQueue
类的按优先级排序元素的阻塞队列 - 运用
DelayQueue
类的延迟元素的阻塞队列 - 运用
ConcurrentSkipListMap
类的非阻塞navigable map
- 运用
ConcurrentHashMap
类的非阻塞散列表 - 运用
AtomicLong
和AtomicIntegerArray
类的原子性变量 - 存储用
volatile
标记关键字的字段变量 - 运用变量句柄的在个体类字段中的原子性操作