小伙伴们知道线程池submit和execute的区别都有哪些嘛?它们都是java线程池中较常用的,下面就让我们一起来看看它们有哪些区别吧。
一、返回值类别
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,也可以为Runnable。
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); ... }
以上就是关于submit和execute的之间区别的所有内容了,关于它们的更多相关java常见问答知识请关注我们来了解详情吧。
推荐阅读: