瀏覽grepcode網站,你會得到答案。
ExecutorService接口,由AbstractExecutorService實現,具有下面的submit()方法的實現。
public <T> Future<T> submit(Callable<T> task) {
if (task == null) throw new NullPointerException();
RunnableFuture<T> ftask = newTaskFor(task);
execute(ftask);
return ftask;
}
protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable) {
return new FutureTask<T>(callable);
}
grepcode爲Executor提供
grepcode爲FutureTask
public FutureTask(Callable<V> callable) {
if (callable == null)
throw new NullPointerException();
sync = new Sync(callable);
}
private final class Sync extends AbstractQueuedSynchronizer {
Sync(Callable<V> callable) {
this.callable = callable;
}
}
public V get() throws InterruptedException, ExecutionException {
return sync.innerGet();
}
V innerGet() throws InterruptedException, ExecutionException {
acquireSharedInterruptibly(0);
if (getState() == CANCELLED)
throw new CancellationException();
if (exception != null)
throw new ExecutionException(exception);
return result;
}
execute
方法的不同實施