jdk20 Structured Concurrency 结构化并发官网示例

发布时间 2023-04-26 17:43:36作者: 大哥超帅

此特性还在孵化,后续版本可能有变动

 //全部执行直到有失败的任务
    String handle() throws ExecutionException, InterruptedException {
        try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {
            Future<String>  user  = scope.fork(() -> "");
            Future<Integer> order = scope.fork(() -> 1);

            scope.join();           // Join both forks
            scope.throwIfFailed();  // ... and propagate errors

            // Here, both forks have succeeded, so compose their results
          return   user.resultNow()+order;

        }
    }
    //有一个任务成功就会关闭资源返回结果
    <T> T race(List<Callable<T>> tasks, Instant deadline) throws ExecutionException, InterruptedException, TimeoutException {
        try (var scope = new StructuredTaskScope.ShutdownOnSuccess<T>()) {
            for (var task : tasks) {
                scope.fork(task);
            }
            scope.joinUntil(deadline);
            return scope.result();  // Throws if none of the forks completed successfully
        }
    }