首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在下面的代码中,向Executor框架提交任务的方法是什么?

在下面的代码中,向Executor框架提交任务的方法是什么?
EN

Stack Overflow用户
提问于 2012-07-10 15:52:44
回答 3查看 729关注 0票数 0

请参考以下from the Javadoc of Future类的代码:

代码语言:javascript
运行
复制
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?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-10 15:56:53

就是这条线

代码语言:javascript
运行
复制
executor.execute(future);

此方法的The javadoc表示:

在将来的某个时候执行给定的命令。根据执行器实现的判断,命令可以在新线程、池化线程或调用线程中执行。

票数 3
EN

Stack Overflow用户

发布于 2012-07-10 16:14:09

你的基本问题已经回答了,我只想评论一下executesubmit

基本上,它们都不能保证立即执行您的代码。如果池中的任务过载,则必须等到队列中所有先前的任务都完成后才能执行任务。

现在,您可以看到方法签名的区别:

代码语言:javascript
运行
复制
void execute(Runnable command) 
public Future<?> submit(Runnable task)

因此,submit允许您获取一个Future引用,稍后可以使用该引用等待任务完成,或者根据需要取消它。

另外,为了把事情完全弄清楚,看一下source of AbstractExecutorService,我们可以看到submit的实现实际上是:

代码语言:javascript
运行
复制
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部分。

票数 3
EN

Stack Overflow用户

发布于 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);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11408873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档