
com.yomahub.liteflow.flow.parallel.CompletableFutureExpand Maven / Gradle / Ivy
The newest version!
package com.yomahub.liteflow.flow.parallel;
import java.util.concurrent.*;
import java.util.function.BiConsumer;
public class CompletableFutureExpand {
/**
* 如果在给定超时之前未完成,则异常完成此 CompletableFuture 并抛出 {@link TimeoutException} 。
*
* @param timeout 在出现 TimeoutException 异常完成之前等待多长时间,以 {@code unit} 为单位
* @param unit 一个 {@link TimeUnit},结合 {@code timeout} 参数,表示给定粒度单位的持续时间
* @return 入参的 CompletableFuture
*/
public static CompletableFuture completeOnTimeout(CompletableFuture future, long timeout, TimeUnit unit, T timeoutDefaultObj) {
if (future.isDone()) {
return future;
}
return future.whenComplete(
new Canceller(
Delayer.delay(
new Timeout<>(future, timeoutDefaultObj),
timeout,
unit
)
)
);
}
/**
* 超时时异常完成的操作
*/
static final class Timeout implements Runnable {
final CompletableFuture future;
final T timeoutDefaultObj;
Timeout(CompletableFuture future, T timeoutDefaultObj) {
this.future = future;
this.timeoutDefaultObj = timeoutDefaultObj;
}
public void run() {
if (null != future && !future.isDone()) {
future.complete(timeoutDefaultObj);
}
}
}
/**
* 取消不需要的超时的操作
*/
static final class Canceller implements BiConsumer
© 2015 - 2025 Weber Informatics LLC | Privacy Policy