void execute(Runnable command);
Future<?> submit(Runnable task);
<T> Future<T> submit(Runnable task, T result);
<T> Future<T> submit(Callable<T> task);
execute方法没有返回值,submit会返回一个future对象。说明submit方法可以通过future.get()判断任务是否执行完。但疑问来了,submit(Runnabletask), submit(Runnable task, T result),使用的是runnable,runnable是不会告诉你任务执行的结果,那是怎么能过获取任务执行完的返回值呢,这需要去到源码看个究竟。
public Future<?> submit(Runnable task) {
if (task == null) throw new NullPointerException();
RunnableFuture<Void> ftask = newTaskFor(task, null);
execute(ftask);
return ftask;
}
public <T> Future<T> submit(Runnable task, T result) {
if (task == null) throw new NullPointerException();
RunnableFuture<T> ftask = newTaskFor(task, result);
execute(ftask);
return ftask;
}
public <T> Future<T> submit(Callable<T> task) {
if (task == null) throw new NullPointerException();
RunnableFuture<T> ftask = newTaskFor(task);
execute(ftask);
return ftask;
}
可以看出submit方法都调用了execute方法。