jdk1.7.0_79
在上一篇《ThreadPoolExecutor线程池原理及其execute方法》中提到了线程池ThreadPoolExecutor的原理以及它的execute方法。本文解析ThreadPoolExecutor#submit。
对于一个任务的执行有时我们不需要它返回结果,但是有我们需要它的返回执行结果。对于线程来讲,如果不需要它返回结果则实现Runnable,而如果需要执行结果的话则可以实现Callable。在线程池同样execute提供一个不需要返回结果的任务执行,而对于需要结果返回的则可调用其submit方法。
回顾ThreadPoolExecutor的继承关系。
在Executor接口中只定义了execute方法,而submit方法则是在ExecutorService接口中定义的。
//ExecutorService
public interface ExecutorService extends Executor {
...
Future submit(Callable task);
Future submit(Runnable task, T result);
Future submit(Runnable task);
...
}
而在其子类AbstractExecutorService实现了submit方法。
//AbstractExecutorService
public abstract class AbstractExecutorService implements ExecutorService {
...
public Future submit(Callable task) {
if (task == null) throw new NullPointerException();
RunnableFuture ftask = newTaskFor(task);
execute(ftask);
return ftask;
}
public Future s