`

java.util.concurrent中文API

 
阅读更多

JavaTM Platform
Standard Ed. 6

 


软件包 java.util.concurrent

在并发编程中很常用的实用工具类。

 

请参见:
          描述

 

接口摘要
BlockingDeque<E>

支持两个附加操作的 Queue,这两个操作是:获取元素时等待双端队列变为非

空;存储元素时等待双端队列中的空间变得可用。

BlockingQueue<E>

支持两个附加操作的 Queue,这两个操作是:获取元素时等待队列变为非空,

以及存储元素时等待空间变得可用。

Callable<V> 返回结果并且可能抛出异常的任务。
CompletionService<V> 将生产新的异步任务与使用已完成任务的结果分离开来的服务。
ConcurrentMap<K,V> 提供其他原子 putIfAbsentremovereplace 方法的 Map
ConcurrentNavigableMap<K,V>

支持 NavigableMap 操作,且以递归方式支持其可导航子映射的

ConcurrentMap

Delayed 一种混合风格的接口,用来标记那些应该在给定延迟时间之后执行的对象。
Executor 执行已提交的 Runnable 任务的对象。
ExecutorService

Executor 提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况

而生成 Future 的方法。

Future<V> Future 表示异步计算的结果。
RejectedExecutionHandler 无法由 ThreadPoolExecutor 执行的任务的处理程序。
RunnableFuture<V> 作为 RunnableFuture
RunnableScheduledFuture<V> 作为 RunnableScheduledFuture
ScheduledExecutorService 一个 ExecutorService,可安排在给定的延迟后运行或定期执行的命令。
ScheduledFuture<V> 一个延迟的、结果可接受的操作,可将其取消。
ThreadFactory 根据需要创建新线程的对象。

 

 

类摘要
AbstractExecutorService 提供 ExecutorService 执行方法的默认实现。
ArrayBlockingQueue<E> 一个由数组支持的有界阻塞队列
ConcurrentHashMap<K,V> 支持获取的完全并发和更新的所期望可调整并发的哈希表。
ConcurrentLinkedQueue<E> 一个基于链接节点的无界线程安全队列
ConcurrentSkipListMap<K,V> 可缩放的并发 ConcurrentNavigableMap 实现。
ConcurrentSkipListSet<E>

一个基于 ConcurrentSkipListMap 的可缩放并发

NavigableSet 实现。

CopyOnWriteArrayList<E>

ArrayList 的一个线程安全的变体,其中所有可变操作(addset

等等)都是通过对底层数组进行一次新的复制来实现的。

CopyOnWriteArraySet<E> 对其所有操作使用内部 CopyOnWriteArrayListSet
CountDownLatch

一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允

许一个或多个线程一直等待。

CyclicBarrier

一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障

点 (common barrier point)。

DelayQueue<E extends Delayed>

Delayed 元素的一个无界阻塞队列,只有在延迟期满时才能从中提

取元素。

Exchanger<V> 可以在对中对元素进行配对和交换的线程的同步点。
ExecutorCompletionService<V> 使用提供的 Executor 来执行任务的 CompletionService
Executors

此包中所定义的 ExecutorExecutorService

ScheduledExecutorServiceThreadFactoryCallable

类的工厂和实用方法。

FutureTask<V> 可取消的异步计算。
LinkedBlockingDeque<E> 一个基于已链接节点的、任选范围的阻塞双端队列
LinkedBlockingQueue<E> 一个基于已链接节点的、范围任意的 blocking queue
PriorityBlockingQueue<E>

一个无界阻塞队列,它使用与类 PriorityQueue 相同的顺序规

则,并且提供了阻塞获取操作。

ScheduledThreadPoolExecutor

ThreadPoolExecutor,它可另行安排在给定的延迟后运行命令,

或者定期执行命令。

Semaphore 一个计数信号量。
SynchronousQueue<E>

一种阻塞队列,其中每个插入操作必须等待另一个线程的对应移除操

作 ,反之亦然。

ThreadPoolExecutor

一个 ExecutorService,它使用可能的几个池线程之一执行每个

提交的任务,通常使用 Executors 工厂方法配置。

ThreadPoolExecutor.AbortPolicy

用于被拒绝任务的处理程序,它将抛出

RejectedExecutionException.

ThreadPoolExecutor.CallerRunsPolicy

用于被拒绝任务的处理程序,它直接在 execute 方法的调用线程中

运行被拒绝的任务;如果执行程序已关闭,则会丢弃该任务。

ThreadPoolExecutor.DiscardOldestPolicy

用于被拒绝任务的处理程序,它放弃最旧的未处理请求,然后重试

execute;如果执行程序已关闭,则会丢弃该任务。

ThreadPoolExecutor.DiscardPolicy 用于被拒绝任务的处理程序,默认情况下它将丢弃被拒绝的任务。

 

 

枚举摘要
TimeUnit

TimeUnit 表示给定单元粒度的时间段,它提供在这些单元中进行跨单元转换和执行计时及延迟操作的

实用工具方法。

 

 

异常摘要
BrokenBarrierException

当某个线程试图等待处于断开状态的 barrier 时,或者 barrier 进入断开状态而线

程处于等待状态时,抛出该异常。

CancellationException

如果某项值生成任务(如 FutureTask)的结果因为任务被取消而无法获取到,则

抛出该异常。

ExecutionException 当试图获取已通过抛出异常而中止的任务的结果时,抛出此异常。
RejectedExecutionException 当无法执行某个任务时,由 Executor 抛出的异常。
TimeoutException 阻塞操作超时时,抛出该异常。

 

软件包 java.util.concurrent 的描述

 

在并发编程中很常用的实用工具类。此包包括了几个小的、已标准化的可扩展框架,以及一些提供有用功能的类,没有这些

类,这些功能会很难实现或实现起来冗长乏味。下面简要描述主要的组件。另请参阅 locksatomic 包。

执行程序

  • 接口

    Executor 是一个简单的标准化接口,用于定义类似于线程的自定义子系统,包括线程池、异步 IO 和轻量级任务框架。根
  • 据所使用的具体 Executor 类的不同,可能在新创建的线程中,现有的任务执行线程中,或者调用 execute() 的线程中

    执行任务,并且可能顺序或并发执行。ExecutorService 提供了多个完整的异步任务执行框架。ExecutorService 管理

    任务的排队和安排,并允许受控制的关闭。ScheduledExecutorService 子接口及相关的接口添加了对延迟的和定期任

    务执行的支持。ExecutorService 提供了安排异步执行的方法,可执行由 Callable 表示的任何函数,结果类似于

    RunnableFuture 返回函数的结果,允许确定执行是否完成,并提供取消执行的方法。RunnableFuture 是拥有 run

    方法的 Future,run 方法执行时将设置其结果。

     

  • 实现

  • ThreadPoolExecutorScheduledThreadPoolExecutor 提供可调的、灵活的线程池。Executors 类提供大多

    数 Executor 的常见类型和配置的工厂方法,以及使用它们的几种实用工具方法。其他基于 Executor 的实用工具包括具

    体类 FutureTask,它提供 Future 的常见可扩展实现,以及 ExecutorCompletionService,它有助于协调对异步任

    务组的处理。

    队列

    java.util.concurrent ConcurrentLinkedQueue 类提供了高效的、可伸缩的、线程安全的非阻塞 FIFO 队列。

    java.util.concurrent 中的五个实现都支持扩展的 BlockingQueue 接口,该接口定义了 put 和 take 的阻塞版本:

    LinkedBlockingQueueArrayBlockingQueueSynchronousQueuePriorityBlockingQueue

    DelayQueue。这些不同的类覆盖了生产者-使用者、消息传递、并行任务执行和相关并发设计的大多数常见使用的上下

    文。BlockingDeque 接口扩展 BlockingQueue,以支持 FIFO 和 LIFO(基于堆栈)操作。LinkedBlockingDeque

    类提供一个实现。

    计时

    TimeUnit 类为指定和控制基于超时的操作提供了多重粒度(包括纳秒级)。该包中的大多数类除了包含不确定的等待之

    外,还包含基于超时的操作。在使用超时的所有情况中,超时指定了在表明已超时前该方法应该等待的最少时间。在超时发

    生后,实现会“尽力”检测超时。但是,在检测超时与超时之后再次实际执行线程之间可能要经过不确定的时间。接受超时

    期参数的所有方法将小于等于 0 的值视为根本不会等待。要“永远”等待,可以使用 Long.MAX_VALUE 值。

    同步器

    四个类可协助实现常见的专用同步语句。Semaphore 是一个经典的并发工具。CountDownLatch 是一个极其简单但又极其

    常用的实用工具,用于在保持给定数目的信号、事件或条件前阻塞执行。CyclicBarrier 是一个可重置的多路同步点,在

    某些并行编程风格中很有用。Exchanger 允许两个线程在 collection 点交换对象,它在多流水线设计中是有用的。

    并发 Collection

    除队列外,此包还提供了设计用于多线程上下文中的 Collection 实现:ConcurrentHashMap

    ConcurrentSkipListMapConcurrentSkipListSetCopyOnWriteArrayListCopyOnWriteArraySet。当期

    望许多线程访问一个给定 collection 时,ConcurrentHashMap 通常优于同步的 HashMapConcurrentSkipListMap

    通常优于同步的 TreeMap。当期望的读数和遍历远远大于列表的更新数时,CopyOnWriteArrayList 优于同步的

    ArrayList

     

    此包中与某些类一起使用的“Concurrent&rdquo前缀;是一种简写,表明与类似的“同步”类有所不同。例如,

    java.util.HashtableCollections.synchronizedMap(new HashMap()) 是同步的,但 ConcurrentHashMap

    则是“并发的”。并发 collection 是线程安全的,但是不受单个排他锁的管理。在 ConcurrentHashMap 这一特定情况

    下,它可以安全地允许进行任意数目的并发读取,以及数目可调的并发写入。需要通过单个锁不允许对 collection 的所有

    访问时,“同步”类是很有用的,其代价是较差的可伸缩性。在期望多个线程访问公共 collection 的其他情况中,通常

    “并发”版本要更好一些。当 collection 是未共享的,或者仅保持其他锁时 collection 是可访问的情况下,非同步

    collection 则要更好一些。

     

    大多数并发 Collection 实现(包括大多数 Queue)与常规的 java.util 约定也不同,因为它们的迭代器提供了弱一致的,而不是快速失败的遍历。弱一致的迭代器是线程安全的,但是在迭代时没有必要冻结 collection,所以它不一定反映自迭代器创建以来的所有更新。

    Java Language Specification 第 17 章定义了内存操作(如共享变量的读写)的 happen-before 关系。只有写入操作 happen-before 读取操作时,才保证一个线程写入的结果对另一个线程的读取是可视的。synchronizedvolatile 构造 happen-before 关系,Thread.start()Thread.join() 方法形成 happen-before 关系。尤其是:

    • 线程中的每个操作 happen-before 稍后按程序顺序传入的该线程中的每个操作。
    • 一个解除锁监视器的(synchronized 阻塞或方法退出)happen-before 相同监视器的每个后续锁(synchronized 阻塞或方法进入)。并且因为 happen-before 关系是可传递的,所以解除锁定之前的线程的所有操作 happen-before 锁定该监视器的任何线程后续的所有操作。
    • 写入 volatile 字段 happen-before 每个后续读取相同字段。volatile 字段的读取和写入与进入和退出监视器具有相似的内存一致性效果,但 需要互斥锁。
    • 在线程上调用 start happen-before 已启动的线程中的任何线程。
    • 线程中的所有操作 happen-before 从该线程上的 join 成功返回的任何其他线程。

    java.util.concurrent 中所有类的方法及其子包扩展了这些对更高级别同步的保证。尤其是:

    • 线程中将一个对象放入任何并发 collection 之前的操作 happen-before 从另一线程中的 collection 访问或移除该元素的后续操作。
    • 线程中向 Executor 提交 Runnable 之前的操作 happen-before 其执行开始。同样适用于向 ExecutorService 提交 Callables
    • 异步计算(由 Future 表示)所采取的操作 happen-before 通过另一线程中 Future.get() 获取结果后续的操作。
    • “释放”同步储存方法(如 Lock.unlockSemaphore.releaseCountDownLatch.countDown)之前的操作 happen-before 另一线程中相同同步储存对象成功“获取”方法(如 Lock.lockSemaphore.acquireCondition.awaitCountDownLatch.await)的后续操作。
    • 对于通过 Exchanger 成功交换对象的每个线程对,每个线程中 exchange() 之前的操作 happen-before 另一线程中对应 exchange() 后续的操作。
    • 调用 CyclicBarrier.await 之前的操作 happen-before 屏障操作所执行的操作,屏障操作所执行的操作 happen-before 从另一线程中对应 await 成功返回的后续操作。

     

     

    从以下版本开始:
    1.5

    JavaTM Platform
    Standard Ed. 6

     


     

    分享到:
    评论

    相关推荐

      java.util.concurrent.Callable API介绍和简单案例

      java.util.concurrent.Callable API介绍和简单案例

      java.util.concurrent.BlockingDeque API介绍和简单案例

      java.util.concurrent.BlockingDeque API介绍和简单案例

      java.util.concurrent.ExecutionException 问题解决方法

      `java.util.concurrent.ExecutionException` 是Java并发编程中一个常见的异常,通常在执行Future对象的get()方法时抛出。这个异常表明在异步任务的执行过程中发生了异常。当我们使用ExecutorService提交任务并尝试...

      java.util.concurrent 测试源文件

      Java.util.concurrent(JUC)是Java平台中的一个核心包,专门用于处理多线程并发问题。这个包包含了大量的工具类和接口,极大地简化了并发编程的复杂性,提高了程序的性能和可伸缩性。本测试源文件主要是针对JUC并发...

      java.util.concurrent系列文章(2)

      - [Java SE 8 文档](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html):提供了 `ConcurrentHashMap` 的官方 API 文档。 - [Doug Lea 的个人网站]...

      JBuider第七章:Java.util包.rar

      Java.util.concurrent包(虽然不是直接在Java.util下,但密切相关)包含了一系列线程安全的数据结构和并发工具,如Semaphore、ExecutorService、CountDownLatch等,极大地简化了多线程编程。 8. **枚举Set**: ...

      java-util大全.rar

      Java的`java.util.concurrent`包提供了丰富的线程工具,如`ExecutorService`、`Semaphore`、`CountDownLatch`等,帮助开发者高效地管理和控制并发。 以上各个模块的知识点相互独立,但又经常协同工作,共同构成了...

      JAVA_API1.6文档(中文)

      java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 ...

      java.lang.runtimeexception unexpected subelement

      5. **版本控制和兼容性**:如果是由于API升级导致的不兼容问题,考虑回滚到旧版本的API,或者更新你的客户端代码以适应新版本的API结构。 6. **日志记录**:为了调试和排查问题,确保你的应用有完善的日志记录机制...

      Java6 API 中文

      Java 6 API中文版是Java开发人员的重要参考资料,它提供了详细的类库文档,使得开发者能够更好地理解和使用Java平台的标准类库。这个API文档是中文语言版本,方便了中文用户阅读和学习,避免了语言障碍,提高了开发...

      JAVA.API.1.6.CN==Java-api中文版1.6

      Java API支持多线程编程,`java.lang.Thread`类和`java.util.concurrent`包提供了丰富的同步和并发工具。`Runnable`接口和`Thread`类结合可以创建并运行线程,`synchronized`关键字用于同步访问,`Semaphore`、`...

      javaapi.zip

      3. **多线程**:Java 支持多线程编程,通过 `java.lang.Thread` 类和 `java.util.concurrent` 包,开发者可以创建和管理并发任务。`java.util.concurrent` 包提供了一些高级并发工具,如 Executor、Semaphore 和 ...

      JAVA-API.rar_JAVA的API中文版_java API_java api

      这个"JAVA-API.rar"压缩包包含了官方的Java API中文版,是学习和理解Java语言的重要参考资料。 在Java API中,我们可以找到以下关键知识点: 1. **类库**: Java API包含了大量的类库,如`java.lang`、`java.util`...

      Java API chinese.zip

      Java API中文版是一个重要的资源,对于学习和理解Java编程语言的开发者来说,它提供了一种中文语言环境下的接口文档,帮助我们更好地理解和使用Java提供的各种类库和功能。本文将详细探讨Java API及其在编程中的关键...

      JavaAPI(官方英文版)

      6. **多线程(Multithreading)**:Java API提供了丰富的多线程支持,包括`java.lang.Thread`类和`java.util.concurrent`包中的高级并发工具。 7. **I/O流(Input/Output Stream)**:Java的I/O系统由`java.io`包...

      Java.API文档中文版

      Java API文档中文版是Java开发人员的重要参考资料,它详尽地介绍了Java平台标准版(Java SE)中的类库、接口、方法以及各种编程规范。这个文档以CHM(Compiled HTML Help)格式提供,便于离线查阅和快速检索。CHM是...

      28个java常用的工具类

      23. **`java.util.concurrent.locks.Lock`** 和 **`java.util.concurrent.locks.ReentrantLock`**: 锁机制,用于线程同步。 24. **`java.util.ArrayList`**: 用于创建堆栈、队列和双端队列的实现,如`ArrayDeque`。...

      java.util源码-java-util:javautil源代码

      13. **功能接口**:`java.util.Function`、`java.util.Consumer`、`java.util.Predicate`等接口是函数式编程的重要组成部分,常用于Lambda表达式和流API。 14. **Stream API**:Java 8引入的Stream API是一种声明式...

      JAVA-API.rar_Java api文档_java api

      这个"JAVA-API.rar"压缩包提供了官方的Java API中文文档,使得开发者在学习和使用Java时能更加方便地理解各种类、接口、方法及其用法。 Java API文档主要分为以下几个部分: 1. **类和接口**:API文档详细列出了...

    Global site tag (gtag.js) - Google Analytics