美文网首页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