static ScheduledThreadPoolExecutor in CompletableFuture.Delayer
在java-9中,类中引入了新方法completeOnTimeout
:CompletableFuture
public CompletableFuture<T> completeOnTimeout(T value, long timeout,
TimeUnit unit) {
if (unit == null)
throw new NullPointerException();
if (result == null)
whenComplete(new Canceller(Delayer.delay(
new DelayedCompleter<T>(this, value),
timeout, unit)));
return this;
}
我不明白的是,为什么它在其实现中使用静态:ScheduledThreadPoolExecutor
static ScheduledFuture<?> delay(Runnable command, long delay,
TimeUnit unit) {
return delayer.schedule(command, delay, unit);
}
哪里
static final ScheduledThreadPoolExecutor delayer;
static {
(delayer = new ScheduledThreadPoolExecutor(
1, new DaemonThreadFactory())).
setRemoveOnCancelPolicy(true);
}
对我来说,这是一种非常奇怪的方法,因为它可能成为整个应用程序的瓶颈:唯一一个只有一个线程保留在池内以执行所有可能任务的方法?ScheduledThreadPoolExecutor
CompletableFuture
我在这里错过了什么?
附言它看起来像这样:
-
此代码的作者不愿意提取此逻辑,而更愿意重用 ,
ScheduledThreadPoolExecutor
-
这显然导致了一个具有静态变量的此类解决方案,因为为每个执行器创建一个新的执行器非常低效。
CompletableFuture
但我的怀疑仍然存在,因为我发现一般的方法很奇怪。