線程池submit與execute的區(qū)別

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()判斷任務是否執(zhí)行完。但疑問來了,submit(Runnabletask), submit(Runnable task, T result),使用的是runnable,runnable是不會告訴你任務執(zhí)行的結(jié)果,那是怎么能過獲取任務執(zhí)行完的返回值呢,這需要去到源碼看個究竟。

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方法都調(diào)用了execute方法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 線程池作用 相對于為每個請求都創(chuàng)建一個線程,線程池通過重用現(xiàn)有的線程而不是創(chuàng)建新線程,可以在處理多個請求時分攤在線...
    Java大生閱讀 1,403評論 0 31
  • 序言 近日后臺需要一些數(shù)據(jù),需要從網(wǎng)上爬取,但是爬取的過程中,由于訪問速度太頻繁,造成IP被封,最終通過線程池解決...
    非專業(yè)程序員閱讀 963評論 0 3
  • 先看幾個概念:線程:進程中負責程序執(zhí)行的執(zhí)行單元。一個進程中至少有一個線程。多線程:解決多任務同時執(zhí)行的需求,合理...
    yeying12321閱讀 614評論 0 0
  • 前言 使用線程池能夠提高線程的復用率,避免不必要的創(chuàng)建線程,能夠節(jié)約內(nèi)存空間和CPU運行時間。除此之外用線程池作為...
    Mars_M閱讀 2,940評論 0 11
  • 明顯感到最近自己后繼無力,不是說復習考試有多難,而是感覺心沒有以前那么靜。不知道是不是最近沒有在圖書館借書的緣故,...
    a67809cc1b4d閱讀 288評論 0 0

友情鏈接更多精彩內(nèi)容