线程池submit与execute的区别

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()判断任务是否执行完。但疑问来了,submit(Runnabletask), submit(Runnable task, T result),使用的是runnable,runnable是不会告诉你任务执行的结果,那是怎么能过获取任务执行完的返回值呢,这需要去到源码看个究竟。

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方法都调用了execute方法。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 线程池作用 相对于为每个请求都创建一个线程,线程池通过重用现有的线程而不是创建新线程,可以在处理多个请求时分摊在线...
    Java大生阅读 1,409评论 0 31
  • 序言 近日后台需要一些数据,需要从网上爬取,但是爬取的过程中,由于访问速度太频繁,造成IP被封,最终通过线程池解决...
    非专业程序员阅读 969评论 0 3
  • 先看几个概念:线程:进程中负责程序执行的执行单元。一个进程中至少有一个线程。多线程:解决多任务同时执行的需求,合理...
    yeying12321阅读 614评论 0 0
  • 前言 使用线程池能够提高线程的复用率,避免不必要的创建线程,能够节约内存空间和CPU运行时间。除此之外用线程池作为...
    Mars_M阅读 2,943评论 0 11
  • 明显感到最近自己后继无力,不是说复习考试有多难,而是感觉心没有以前那么静。不知道是不是最近没有在图书馆借书的缘故,...
    a67809cc1b4d阅读 288评论 0 0

友情链接更多精彩内容