小伙伴们知道线程池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)
{
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 ftask = newTaskFor(task, null);
execute(ftask);
return ftask;
}
/**
* @throws RejectedExecutionException {@inheritDoc}
* @throws NullPointerException {@inheritDoc}
*/
public Future submit(Runnable task, T result)
{
if (task == null) throw new NullPointerException();
RunnableFuture ftask = newTaskFor(task, result);
execute(ftask);
return ftask;
}
/**
* @throws RejectedExecutionException {@inheritDoc}
* @throws NullPointerException {@inheritDoc}
*/
public Future submit(Callable task)
{
if (task == null) throw new NullPointerException();
RunnableFuture 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
{
...
Future submit(Callable task);
Future submit(Runnable task, T result);
Future> submit(Runnable task);
...
}
以上就是关于submit和execute的之间区别的所有内容了,关于它们的更多相关java常见问答知识请关注我们来了解详情吧。
推荐阅读: