ExecutorService.submit(可运行任务,T结果)中的“结果”有什么作用?


问题内容

看着它只是说的javadocs

<T> Future<T> submit(Runnable task, T result)

提交要执行的Runnable任务,并返回代表该任务的Future。Future的get方法将在成功完成后返回给定的结果。

参数:

任务-提交的任务

结果-要返回的结果

但是结果如何呢?它在那里存储什么吗?它是否仅使用结果的类型来指定类型Future<T>


问题答案:

它对结果没有任何作用-保留它。任务成功完成后,调用future.get()将返回您传递的结果。

这是Executors $ RunnableAdapter的源代码,它显示任务运行后,将返回原始结果:

static final class RunnableAdapter<T> implements Callable<T> {
    final Runnable task;
    final T result;
    RunnableAdapter(Runnable  task, T result) {
        this.task = task;
        this.result = result;
    }
    public T call() {
        task.run();
        return result;
    }
}

是的,结果的通用类型应与返回的Future的通用类型匹配。