Skip navigation links
Java™ Platform
Standard Ed. 8

Package java.util.concurrent

实用程序类通常在并发编程中很有用。

See: 描述

Package java.util.concurrent Description

实用程序类通常在并发编程中很有用。 这个包包括一些小的标准化可扩展框架,以及一些类,它们提供有用的功能,而不是繁琐或难以实现。 以下是主要组件的简要说明。 另请参阅java.util.concurrent.locksjava.util.concurrent.atomic软件包。

执行人员

接口 Executor是一个简单的标准化接口,用于定义线程类自定义子系统,包括线程池,异步I / O和轻量级任务框架。 根据使用的具体的Executor类,任务可以在新创建的线程,现有任务执行线程或线程调用execute中执行,并且可以顺序执行或同时执行。 ExecutorService提供了一个更完整的异步任务执行框架。 ExecutorService管理任务的排队和调度,并允许受控关闭。 ScheduledExecutorService接口和关联接口增加了对延迟和周期性任务执行的支持。 ExecutorServices提供了排列异步执行方法的方法,表示为Callable ,结果轴承类型为Runnable A Future返回函数的结果,允许确定执行是否已完成,并提供取消执行的方法。 A RunnableFuture是一个Future ,拥有一个run方法,在执行时,设置其结果。

实施。 类别ThreadPoolExecutorScheduledThreadPoolExecutor提供可调谐,灵活的线程池。 Executors类为执行程序的最常见种类和配置提供工厂方法,以及一些使用它们的实用方法。 基于Executors其他实用Executors包括具体的类别FutureTask提供了Futures的共同可扩展的实现,以及ExecutorCompletionService ,它有助于协调异步任务组的处理。

ForkJoinPool提供主要设计用于加工实例一个Executor ForkJoinTask和它的子类。 这些类采用一个工作窃取调度程序,它可以满足在计算密集型并行处理中经常保持的限制的任务的高吞吐量。

队列

ConcurrentLinkedQueue类提供了一个高效的可伸缩线程安全非阻塞FIFO队列。 ConcurrentLinkedDeque类是类似的,但另外支持Deque接口。

五个实现都java.util.concurrent支持扩展BlockingQueue接口中,定义阻塞put和take的版本: LinkedBlockingQueueArrayBlockingQueueSynchronousQueuePriorityBlockingQueueDelayQueue 不同的类涵盖了生产者 - 消费者,消息传递,并行任务和相关并发设计的最常见的使用上下文。

扩展接口TransferQueue和实现LinkedTransferQueue引入同步transfer方法(以及相关特征),其中生产者可以可选地阻止等待其消费者。

BlockingDeque接口扩展了BlockingQueue以支持FIFO和LIFO(基于堆栈)的操作。 LinkedBlockingDeque课程提供了一个实现。

定时

TimeUnit类提供了多个粒度(包括纳秒),用于指定和控制基于超时的操作。 软件包中的大多数类除了无限期的等待之外还包含基于超时的操作。 在所有使用超时的情况下,超时指定方法在指示超时之前应等待的最短时间。 实施做出“尽力而为”,在发现之后尽快检测超时。 然而,在超时检测到的时间和在该超时之后实际执行的线程之间可能经过不定期的时间。 接受超时参数的所有方法都将小于或等于0的值视为不等待。 要等待“永远”,可以使用Long.MAX_VALUE的值。

同步器

五类帮助常用的专用同步成语。

并发收藏

除了队列,这个包提供的集合实现在多线程环境中设计用于: ConcurrentHashMapConcurrentSkipListMapConcurrentSkipListSetCopyOnWriteArrayListCopyOnWriteArraySet 当预期许多线程访问给定的集合时, ConcurrentHashMap通常优于同步的HashMap ,并且ConcurrentSkipListMap通常优于同步的TreeMap CopyOnWriteArrayList优选同步ArrayList时的预期数量的读取和遍历的数量大大超过更新的数量的列表。

与此包中某些类使用的“并发”前缀是一个简写,表示与类似“同步”类的几个差异。 例如java.util.HashtableCollections.synchronizedMap(new HashMap())被同步。 ConcurrentHashMap是“并发”。 并发集合是线程安全的,但不受单个排除锁的约束。 在ConcurrentHashMap的特定情况下,它可以安全地允许任意数量的并发读取以及可调整数量的并发写入。 当您需要通过单个锁来阻止对集合的所有访问时,“同步”类可能会有用,而不损害可扩展性。 在预期多个线程访问公共集合的其他情况下,“并发”版本通常是可取的。 并且当两个集合都是非共享的时候,不同步的集合是可取的,或者只有在持有其他锁时才可访问。

大多数并发收集实现(包括大多数队列)也与通常的java.util约定不同,因为它们的IteratorsSpliterators提供弱一致而不是快速失败遍历:

内存一致性属性

Chapter 17 of the Java Language Specification定义了内存操作(例如共享变量的读取和写入) 之前发生关系。 只有在写操作发生之前 ,一个线程的写入结果才能保证对另一个线程的读取可见。 synchronizedvolatile构造以及Thread.start()Thread.join()方法可以形成发生之前的关系。 尤其是: java.util.concurrent及其子包中的所有类的方法将这些保证扩展到更高级别的同步。 尤其是:
从以下版本开始:
1.5
Skip navigation links
Java™ Platform
Standard Ed. 8