我之前在项目里也遇到了类似的问题,然后自己根据ThreadPoolTaskExecutor,实现了一个TtlThreadPoolTaskExecutor。一开始想对ThreadPoolTaskExecutor底层的threadPoolExecutor进行包装,后来发现它并未对外暴露,这个想法不成立。那我们就着手在执行时进行包装,复写它的execute(),submit()等方法。这种方式,也不会干扰其它的方法,对内部线程池参数的修改。具体如下,实现起来很简单:
submit(Runnable task) {
return super.submit(Objects.requireNonNull(TtlRunnable.get(task), ERROR_MESSAGE));
}
@Override
public Future submit(Callable task) {
return super.submit(Objects.requireNonNull(TtlCallable.get(task), ERROR_MESSAGE));
}
@Override
public ListenableFuture submitListenable(Runnable task) {
return super.submitListenable(Objects.requireNonNull(TtlRunnable.get(task), ERROR_MESSAGE));
}
@Override
public ListenableFuture submitListenable(Callable task) {
return super.submitListenable(Objects.requireNonNull(TtlCallable.get(task), ERROR_MESSAGE));
}
}
@oldratlee @liauraljl
|