介绍

在并发程序中使用数据集合时,您必须非常注意您选择的实现。 许多集合类不适合用在并发应用中,因为它们没有控制对它们的数据的并发访问。 如果某些并发任务共享一个不适合用于并发任务的数据结构,可能有数据不一致的错误,将影响程序的正确操作。 这类数据结构的一个例子是 ArrayList 类。

Java提供了可用于并发应用、没有任何问题或不一致的数据集合。基本上,Java提供了2类用于并发应用的集合:

  • 阻塞集合: 集合的添加、移除数据操作,如果不能立即执行(如因为集合满了或为空),调用的线程被阻塞直到操作能执行。
  • 非阻塞集合:集合的添加、移除数据操作,如果不能立即执行,则返回null或抛出异常,调用的线程不会被阻塞。

在本章中,您将学习如何使用能用于并发应用的一些Java集合。包括以下:

  • 非阻塞列表: ConcurrentLinkedDeque
  • 阻塞列表: LinkedBlockingDeque
  • 用于数据生产者和消费者的阻塞列表: LinkedTransferQueue
  • 按优先级对元素排序的阻塞列表: PriorityBlockingQueue
  • 有延时元素的阻塞队列: DelayQueue
  • 非阻塞可导航映射: ConcurrentSkipListMap
  • 随机数字: ThreadLocalRandom
  • 原子变量: AtomicLong, AtomicIntegerArray