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()判斷任務是否執(zhí)行完。但疑問來了,submit(Runnabletask), submit(Runnable task, T result),使用的是runnable,runnable是不會告訴你任務執(zhí)行的結(jié)果,那是怎么能過獲取任務執(zhí)行完的返回值呢,這需要去到源碼看個究竟。
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方法都調(diào)用了execute方法。