Executor家族-AbstractExecutorServi
2020-12-22 本文已影响0人
于情于你
image.png
该抽象类提供了
image.png
该抽象类提供了
ExecutorService
执行方法的默认实现,此类重写了submit , invokeAny和invokeAll方法,在实现中都使用了newTaskFor方法返回RunnableFuture。(FutureTask implements RunnableFuture)。
newTaskFor和submit的方法实现如下:
protected <T> RunnableFuture<T> newTaskFor(Runnable runnable, T value) {
return new FutureTask<T>(runnable, value);
}
public Future<?> submit(Runnable task) {
if (task == null) throw new NullPointerException();
RunnableFuture<Void> ftask = newTaskFor(task, null);
execute(ftask);
return ftask;
}
我们可以看到newTaskFor方法new了一个FutureTask对象返回的RunnableFuture
如果不想用这种方式返回RunnableFuture,则可以继承AbstractExecutorService类,重写newTaskFor方法。
比如下面CustomThreadPoolExecutor继承了ThreadPoolExecutor(ThreadPoolExecutor也是AbstractExecutorService的子类)
public class CustomThreadPoolExecutor extends ThreadPoolExecutor {
static class CustomTask<V> implements RunnableFuture<V> {...
}
protected <V> RunnableFuture<V> newTaskFor(Callable<V> c) {
return new CustomTask<V>(c);
}
protected <V> RunnableFuture<V> newTaskFor(Runnable r, V v) {
return new CustomTask<V>(r, v);
}
// ... add constructors, etc.
}
AbstractExecutorService的所有方法如下:
image.png