高级并发对象
到目前为止,本课程重点关注从一开始就是 Java 平台一部分的低级别 API,这些 API 适用于非常基础的任务,但更高级的任务需要更高级别的构建块,对于充分利用当今多处理器和多核系统的大规模并发应用程序尤其如此。
在本节中,我们将介绍 Java 平台 5.0 版中引入的一些高级并发功能,大多数这些功能都在新的 java.util.concurrent 包中实现,Java 集合框架中还有新的并发数据结构。
Lock 对象支持简化许多并发应用程序的锁定语法。
执行器定义用于启动和管理线程的高级 API,java.util.concurrent 提供的执行器实现提供适用于大规模应用程序的线程池管理。
并发集合使管理大量数据更容易,并且可以大大减少同步需求。
原子变量具有最小化同步并有助于避免内存一致性错误的功能。
ThreadLocalRandom(在 JDK 7 中)提供从多个线程有效生成伪随机数。
并发集合
java.util.concurrent 包中包括对 Java 集合框架的大量添加,这些最容易按照提供的集合接口进行分类:
BlockingQueue 定义了先进先出的数据结构,当你尝试向满的队列添加或从空队列中检索时,该数据结构会阻塞或超时。
ConcurrentMap 是 java.util.Map 的子接口,它定义了有用的原子操作,仅当键存在时,这些操作才会移除或替换键值对,或仅在键不存在时才添加键值对,使这些操作原子化有助于避免同步,ConcurrentMap 的标准泛型实现是 ConcurrentHashMap,它是 HashMap 的并发模拟。
ConcurrentNavigableMap 是 ConcurrentMap 的子接口,支持近似匹配,ConcurrentNavigableMap 的标准泛型实现是 ConcurrentSkipListMap,它是 TreeMap 的并发模拟。
所有这些集合通过定义将对象添加到集合的操作与访问或移除该对象的后续操作之间的先发生关系来帮助避免内存一致性错误。
并发随机数
在 JDK 7 中,java.util.concurrent 包含一个方便的类 ThreadLocalRandom,用于期望使用来自多个线程或 ForkJoinTasks 的随机数的应用程序。
对于并发访问,使用 ThreadLocalRandom 而不是 Math.random() 可以减少竞争,并最终提高性能。
你需要做的就是调用 ThreadLocalRandom.current(),然后调用其中一个方法来检索随机数,这是一个例子:
int r = ThreadLocalRandom.current().nextInt(4, 77);
进一步阅读
Java Concurrent Animated:展示并发功能用法的动画。
上一篇:不可变对象
下一篇:Lock 对象