请参考以下from the Javadoc of Future类的代码:
FutureTask<String> future =
new FutureTask<String>(new Callable<String>() {
public String call() {
return searcher.search(target);
}});
executor.execute(future);附言:我不会在这里做任何独家的executor.submit(future)调用。
所以我在这里尝试通过调用executor.execute()方法来执行未来的任务。但是任务最初是如何提交给executor框架的呢?上面的哪一行代码实际上是将任务提交给executor?
发布于 2012-07-10 15:56:53
就是这条线
executor.execute(future);此方法的The javadoc表示:
在将来的某个时候执行给定的命令。根据执行器实现的判断,命令可以在新线程、池化线程或调用线程中执行。
发布于 2012-07-10 16:14:09
你的基本问题已经回答了,我只想评论一下execute和submit。
基本上,它们都不能保证立即执行您的代码。如果池中的任务过载,则必须等到队列中所有先前的任务都完成后才能执行任务。
现在,您可以看到方法签名的区别:
void execute(Runnable command)
public Future<?> submit(Runnable task)因此,submit允许您获取一个Future引用,稍后可以使用该引用等待任务完成,或者根据需要取消它。
另外,为了把事情完全弄清楚,看一下source of AbstractExecutorService,我们可以看到submit的实现实际上是:
103 /**
104 * @throws RejectedExecutionException {@inheritDoc}
105 * @throws NullPointerException {@inheritDoc}
106 */
107 public Future<?> submit(Runnable task) {
108 if (task == null) throw new NullPointerException();
109 RunnableFuture<Void> ftask = newTaskFor(task, null);
110 execute(ftask);
111 return ftask;
112 }在第110行,您可以看到它实际上调用了execute,因此它们的功能是相同的,取模Future部分。
发布于 2012-07-10 16:07:57
I am not doing any exclusive executor.submit(future)
Executor接口有一个方法execute,它将Runnable作为parameter.The类。FutureTask类是实现Runnable的Future的实现,因此可以由执行器执行。
因此,您可以在下面的代码中运行
executor.execute(future);
https://stackoverflow.com/questions/11408873
复制相似问题