美文网首页JUC并发包
Executor家族-AbstractExecutorServi

Executor家族-AbstractExecutorServi

作者: 于情于你 | 来源:发表于2020-12-22 13:47 被阅读0次
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

相关文章

网友评论

    本文标题:Executor家族-AbstractExecutorServi

    本文链接:https://www.haomeiwen.com/subject/sfhsnktx.html