一:
submit() 方法, 可以提供 Future <T> 类型的返回值.
executor() 方法, 无返回值.
execute 无返回值
- public void execute(Runnable command) {
- if (command == null)
- throw new NullPointerException();// 抛掉异常
- int c = ctl.get();
- if (workerCountOf(c) <corePoolSize) {
- if (addWorker(command, true))
- return;
- c = ctl.get();
- }
- if (isRunning(c) && workQueue.offer(command)) {
- int recheck = ctl.get();
- if (! isRunning(recheck) && remove(command))
- reject(command);
- else if (workerCountOf(recheck) == 0)
- addWorker(null, false);
- }
- else if (!addWorker(command, false))
- reject(command);
- }
submit 有 Future 返回值 :
- /**
- * @throws RejectedExecutionException {@inheritDoc}
- * @throws NullPointerException {@inheritDoc}
- */
- public Future<?> submit(Runnable task) {
- if (task == null) throw new NullPointerException();
- RunnableFuture<Void> ftask = newTaskFor(task, null);
- execute(ftask);
- return ftask;
- }
- /**
- * @throws RejectedExecutionException {@inheritDoc}
- * @throws NullPointerException {@inheritDoc}
- */
- 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;
- }
- /**
- * @throws RejectedExecutionException {@inheritDoc}
- * @throws NullPointerException {@inheritDoc}
- */
- public <T> Future<T> submit(Callable<T> task) {
- if (task == null) throw new NullPointerException();
- RunnableFuture<T> ftask = newTaskFor(task);
- execute(ftask);
- return ftask;
- }
二:
excute 方法会抛出异常.
sumbit 方法不会抛出异常. 除非你调用 Future.get().
三:
excute 入参 Runnable
submit 入参可以为 Callable
- public interface Executor {
- void execute(Runnable command);
- }
- public interface ExecutorService extends Executor {
- ...
- <T> Future<T> submit(Callable<T> task);
- <T> Future<T> submit(Runnable task, T result);
- Future<?> submit(Runnable task);
- ...
- }
来源: https://www.cnblogs.com/androidsuperman/p/9784821.html