收集中的FutureTask如何在内部工作?

时间:2016-10-15 03:32:09

标签: java multithreading collections executorservice concurrent.futures

我想了解FutureTaskCollections的工作情况。据我所知,您可以使用ExecutorService创建一个线程池。稍后您可以将RunnableCallable包裹在FutureTask中并执行它。之后,您可以使用Future对象检查获取结果或检查任务是否正在运行。但是这在内部是如何做的?

我想要了解的是当您传递Callable接口时,场景背后会发生什么。我几乎没有问题

  1. FutureTask本身是否在内部运行一个线程来不断检查Callable命令是否已完成执行?如果没有,那么它如何知道命令何时完成执行?

  2. get()方法如何工作?它是如何获得从Callable接口返回的值的?

  3. 查看文档我无法理解。是否有任何代码示例,我可以看一下,以了解幕后。

1 个答案:

答案 0 :(得分:0)

浏览grepcode网站,您将获得答案。

AbstractExecutorService实现的ExecutorService接口具有以下submit()方法的实现。

private static $belongs_many_many = array(
    'StaffCatObjects' => 'StaffCatObject'
);

static $summary_fields = array(
    'Thumbnail' => 'Thumbnail',
    'StaffTitle' => 'Name',
    'Email' => 'Email',
    'CheckDisplay' => 'wird angezeigt in'
);

Executor的grepcode提供了public <T> Future<T> submit(Callable<T> task) { if (task == null) throw new NullPointerException(); RunnableFuture<T> ftask = newTaskFor(task); execute(ftask); return ftask; } protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable) { return new FutureTask<T>(callable); } 方法

的不同实现

FutureTask

的grepcode
execute