Open
Description
建议添加针对 Guava ListenableFuture 相关执行器接口支持,TtlExecutors 提供对 ListeningExecutorService,ListeningScheduledExecutorService 的支持。
原有实现若使用 TtlExecutors#getTtlExecutorService,返回结果没有实现 ListeningExecutorService 接口,只能在执行任务后手动强转为ListenableFuture。
使用装饰器模式时,可能不存在一个统一的方法(getTtlExecutor) 直接解决返回类型和委托类型的兼容问题,每个接口都需要写一个Wrapper实现。
以下是我自己的简单实现示例。
class Demo {
public static ListeningExecutorService getTtlListeningExecutorService(ListeningExecutorService delegate) {
return new ListeningExecutorServiceTtlWrapper(delegate, false);
}
@Value
static class ListeningExecutorServiceTtlWrapper extends ForwardingListeningExecutorService implements TtlWrapper<ListeningExecutorService> {
@NonNull
ListeningExecutorService executor;
boolean idempotent;
// 避免耦合
@Override
protected ListeningExecutorService delegate() {
return executor;
}
@Override
public @NonNull ListeningExecutorService unwrap() {
return executor;
}
@Override
public <T> ListenableFuture<T> submit(Callable<T> task) {
task = TtlCallable.get(task, false, idempotent);
return super.submit(task);
}
// 略去其他
}
}
Metadata
Metadata
Assignees
Labels
No labels