java.util.concurrent.locks
and
java.util.concurrent.atomic
packages.
Executor
is a simple standardized interface for defining custom thread-like subsystems, including thread pools, asynchronous I/O, and lightweight task frameworks. Depending on which concrete Executor class is being used, tasks may execute in a newly created thread, an existing task-execution thread, or the thread calling
execute
, and may execute sequentially or concurrently.
ExecutorService
provides a more complete asynchronous task execution framework. An ExecutorService manages queuing and scheduling of tasks, and allows controlled shutdown. The
ScheduledExecutorService
subinterface and associated interfaces add support for delayed and periodic task execution. ExecutorServices provide methods arranging asynchronous execution of any function expressed as
Callable
, the result-bearing analog of
Runnable
. A
Future
returns the results of a function, allows determination of whether execution has completed, and provides a means to cancel execution. A
RunnableFuture
is a
Future
that possesses a
run
method that upon execution, sets its results.
实现。 类ThreadPoolExecutor
和ScheduledThreadPoolExecutor
提供可调整的灵活线程池。 Executors
类为Executors的最常见类型和配置提供工厂方法,以及使用它们的一些实用方法。 基于Executors
其他实用程序包括具体的类FutureTask
提供Futures的通用可扩展实现, ExecutorCompletionService
,它协助协调处理异步任务组。
ForkJoinPool
类提供了一个Executor,主要用于处理ForkJoinTask
及其子类的实例。 这些类使用工作窃取调度程序,可以获得高吞吐量,以执行符合经常用于计算密集型并行处理的限制的任务。
ConcurrentLinkedQueue
class supplies an efficient scalable thread-safe non-blocking FIFO queue. The
ConcurrentLinkedDeque
class is similar, but additionally supports the
Deque
interface.
五个实现都java.util.concurrent
支持扩展BlockingQueue
接口中,定义阻塞put和take的版本: LinkedBlockingQueue
, ArrayBlockingQueue
, SynchronousQueue
, PriorityBlockingQueue
,并DelayQueue
。 不同的类涵盖了生产者 - 消费者,消息传递,并行任务和相关并发设计的最常见使用情境。
扩展接口 TransferQueue
,和实施 LinkedTransferQueue
引入同步 transfer
方法,其中,生产商可以可选地等待块其消费者(以及相关的功能一起)。
BlockingDeque
接口扩展BlockingQueue
以支持FIFO和LIFO(基于堆栈)操作。 LinkedBlockingDeque
类提供了一个实现。
TimeUnit
class provides multiple granularities (including nanoseconds) for specifying and controlling time-out based operations. Most classes in the package contain operations based on time-outs in addition to indefinite waits. In all cases that time-outs are used, the time-out specifies the minimum time that the method should wait before indicating that it timed-out. Implementations make a "best effort" to detect time-outs as soon as possible after they occur. However, an indefinite amount of time may elapse between a time-out being detected and a thread actually executing again after that time-out. All methods that accept timeout parameters treat values less than or equal to zero to mean not to wait at all. To wait "forever", you can use a value of
Long.MAX_VALUE
.
Semaphore
is a classic concurrency tool. CountDownLatch
is a very simple yet very common utility for blocking until a given number of signals, events, or conditions hold. CyclicBarrier
is a resettable multiway synchronization point useful in some styles of parallel programming. Phaser
provides a more flexible form of barrier that may be used to control phased computation among multiple threads. Exchanger
allows two threads to exchange objects at a rendezvous point, and is useful in several pipeline designs. ConcurrentHashMap
,
ConcurrentSkipListMap
,
ConcurrentSkipListSet
,
CopyOnWriteArrayList
, and
CopyOnWriteArraySet
. When many threads are expected to access a given collection, a
ConcurrentHashMap
is normally preferable to a synchronized
HashMap
, and a
ConcurrentSkipListMap
is normally preferable to a synchronized
TreeMap
. A
CopyOnWriteArrayList
is preferable to a synchronized
ArrayList
when the expected number of reads and traversals greatly outnumber the number of updates to a list.
与此包中的某些类一起使用的“并发”前缀是一种简写,表示与类似的“同步”类有几处不同之处。 例如java.util.Hashtable
和Collections.synchronizedMap(new HashMap())
是同步的。 但是ConcurrentHashMap
是“并发”的。 并发集合是线程安全的,但不受单个排除锁定的控制。 在ConcurrentHashMap的特殊情况下,它安全地允许任意数量的并发读取以及可调数量的并发写入。 当需要通过单个锁来阻止对集合的所有访问时,“同步”类可能非常有用,但代价是可扩展性较差。 在其他情况下,多个线程需要访问一个通用集合,“并发”版本通常更可取。 如果任何一个集合是非共享的,或者只有在持有其他锁时才可访问,则非同步集合更可取。
大多数并发集合实现(包括大多数队列)也与通常的 java.util
约定不同,因为它们的 Iterators和 Spliterators提供 弱一致性而不是快速失败遍历:
ConcurrentModificationException
synchronized
and
volatile
constructs, as well as the
Thread.start()
and
Thread.join()
methods, can form
happens-before relationships. In particular:
synchronized
block or method exit) of a monitor happens-before every subsequent lock (synchronized
block or method entry) of that same monitor. And because the happens-before relation is transitive, all actions of a thread prior to unlocking happen-before all actions subsequent to any thread locking that monitor. volatile
field happens-before every subsequent read of that same field. Writes and reads of volatile
fields have similar memory consistency effects as entering and exiting monitors, but do not entail mutual exclusion locking. start
on a thread happens-before any action in the started thread. join
on that thread. java.util.concurrent
and its subpackages extend these guarantees to higher-level synchronization. In particular:
Runnable
to an Executor
happen-before its execution begins. Similarly for Callables
submitted to an ExecutorService
. Future
happen-before actions subsequent to the retrieval of the result via Future.get()
in another thread. Lock.unlock
, Semaphore.release
, and CountDownLatch.countDown
happen-before actions subsequent to a successful "acquiring" method such as Lock.lock
, Semaphore.acquire
, Condition.await
, and CountDownLatch.await
on the same synchronizer object in another thread. Exchanger
, actions prior to the exchange()
in each thread happen-before those subsequent to the corresponding exchange()
in another thread. CyclicBarrier.await
and Phaser.awaitAdvance
(as well as its variants) happen-before actions performed by the barrier action, and actions performed by the barrier action happen-before actions subsequent to a successful return from the corresponding await
in other threads. TimeUnit | A TimeUnit 表示给定粒度单位的持续时间,并提供跨设备转换的实用方法,并在这些设备中执行计时和延迟操作。 |
BrokenBarrierException | 当线程试图等待处于断开状态的障碍或在线程正在等待时进入断开状态时抛出的异常。 |
CancellationException | 指示由于任务被取消而无法检索值生成任务(例如 FutureTask 的结果的异常。 |
CompletionException | 在完成结果或任务过程中遇到错误或其他异常时抛出异常。 |
ExecutionException | 尝试检索由抛出异常中止的任务的结果时抛出异常。 |
RejectedExecutionException | 当任务不能被接受执行时,由 Executor 引发的异常。 |
TimeoutException | 阻止操作超时时抛出异常。 |