我想了解FutureTask
中Collections
的工作情况。据我所知,您可以使用ExecutorService
创建一个线程池。稍后您可以将Runnable
或Callable
包裹在FutureTask
中并执行它。之后,您可以使用Future对象检查获取结果或检查任务是否正在运行。但是这在内部是如何做的?
我想要了解的是当您传递Callable接口时,场景背后会发生什么。我几乎没有问题
FutureTask本身是否在内部运行一个线程来不断检查Callable命令是否已完成执行?如果没有,那么它如何知道命令何时完成执行?
get()方法如何工作?它是如何获得从Callable接口返回的值的?
查看文档我无法理解。是否有任何代码示例,我可以看一下,以了解幕后。
答案 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);
}
方法
execute