|
Relates :
|
|
JDK-8134850 :
|
|
|
JDK-8134851 :
|
|
|
JDK-8134852 :
|
|
|
JDK-8134853 :
|
|
|
JDK-8134854 :
|
|
|
JDK-8134855 :
|
|
|
JDK-8169515 :
|
Summary
-------
An interoperable publish-subscribe framework, enhancements to the
`CompletableFuture` API, and various other improvements.
Motivation
----------
The continual evolution of uses of concurrency and parallelism in
applications requires continual evolution in library support.
Description
-----------
1. Interfaces supporting the Reactive Streams publish-subscribe
framework, nested within the new class `Flow`. `Publisher`s produce
items consumed by one or more `Subscriber`s, each managed by a
`Subscription`. Communication relies on a simple form of flow control
(method `Subscription.request`, for communicating back pressure) that
can be used to avoid resource management problems that may otherwise
occur in "push" based systems. A utility class `SubmissionPublisher` is provided
that developers can use to create custom components.
These (very small) interfaces correspond to those
defined with broad participation (from the
[Reactive Streams][reactiveStreams] initiative) and support
interoperability across a number of async systems running on
JVMs. Nesting the interfaces within a class is a conservative policy
allowing their use across various short-term and long-term
possibilities. There are no plans to provide network- or I/O-based
`java.util.concurrent` components for distributed messaging, but it is possible
that future JDK releases will include such APIs in other packages.
2. Enhancements to the `CompletableFuture` API
- Time-based enhancements are added that enable a future to complete with
a value or exceptionally after a certain duration, see methods `orTimeout` and
`completeTimeout`.
In addition, a complementary `Executor` returned by the static methods
named `delayedExecutor` allow a task to execute after a certain duration.
This may be combined with `Executor` receiving methods on `CompletableFuture`
to support operations with time-delays.
- Subclass enhancements are added making it easier to extend from
`CompletableFuture`, such as to provide a subclass that supports an alternative
default executor.
3. Numerous implementation improvements accumulated since JDK 8; many of them are
small, but some include Javadoc spec rewordings.
[reactiveStreams]: http://www.reactive-streams.org/
Testing
-------
The continuing set of JSR 166 EG members provide functionality, TCK, and
performance tests for all components.
Risks and Assumptions
---------------------
Care will be taken to ensure any small but required differences in code between the JDK 9 repository and the 166 repository are retained.
|