Changes for [JEP draft: Structured Concurrency (Fourth 
Preview)](https://openjdk.org/jeps/8340343). The JEP isn't on the technical 
roadmap yet. The proposal is to re-preview the API with some changes, 
specifically:

- A 
[StructuredTaskScope](https://download.java.net/java/early_access/loom/docs/api/java.base/java/util/concurrent/StructuredTaskScope.html)
 is now opened with a static factory method instead of a constructor.  Once 
opened, the API usage is unchanged: fork subtasks individually, join them as a 
unit, process outcome, and close.
- In conjunction with moving to using a static open method, policy and desired 
outcome is now selected by specifying a Joiner to the open method rather than 
extending STS. A Joiner handles subtask completion and produces the result for 
join to return. Joiner.onComplete is the equivalent of overriding 
handleComplete previously. This change means that the subclasses 
ShutdownOnFailure and ShutdownOnSuccess are removed, replaced by factory 
methods on Joiner to get an equivalent Joiner.
- The join method is changed to return the result or throw STS.FailedException, 
replacing the need for an API in subclasses to obtain the outcome. This removes 
the hazard that was forgetting to call throwIfFailed to propagate exceptions.
- Configuration that was provided with parameters for the constructor is 
changed so that can be provided by a configuration function.
- joinUntil is replaced by allowing a timeout be configured by the 
configuration function. This allows the timeout to apply the scope rather than 
the join method.
 
The underlying implementation is unchanged except that ThreadFlock.shutdown and 
wakeup methods are no longer confined. The STS API implementation moves to 
non-public StructuedTaskScopeImpl because STS is now an interface. A non-public 
Joiners class is added with the built-in Joiner implementations.

-------------

Commit messages:
 - Sync up from loom repo
 - Initial commit

Changes: https://git.openjdk.org/jdk/pull/21934/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=21934&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8342486
  Stats: 4114 lines in 15 files changed: 1888 ins; 1519 del; 707 mod
  Patch: https://git.openjdk.org/jdk/pull/21934.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/21934/head:pull/21934

PR: https://git.openjdk.org/jdk/pull/21934

Reply via email to