最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java線程池execute()和submit()的對(duì)比詳解

 更新時(shí)間:2026年06月04日 09:14:56   作者:碼不停蹄的玄黓  
這段文章詳細(xì)對(duì)比了execute()和submit()在Java線程池中的核心區(qū)別,包括返回值、異常處理及支持的任務(wù)類型,并提供了實(shí)戰(zhàn)代碼示例,關(guān)鍵詞:execute()、submit()、線程池提交任務(wù),需要的朋友可以參考下

execute()submit() 都是線程池提交任務(wù)的核心方法,都屬于 ExecutorService 線程池接口,核心區(qū)別execute() 無(wú)返回值、不處理異常;submit() 有返回值、會(huì)捕獲異常。

下面從核心定義、使用場(chǎng)景、返回值、異常處理、方法歸屬等維度做清晰對(duì)比,附實(shí)戰(zhàn)代碼。

一、核心區(qū)別速查表

對(duì)比項(xiàng)execute()submit()
返回值void,無(wú)返回結(jié)果Future<T>,可獲取任務(wù)執(zhí)行結(jié)果/狀態(tài)
異常處理直接拋出異常(會(huì)終止線程,從線程池移除)自動(dòng)捕獲異常,需通過(guò) Future.get() 才拋出
任務(wù)類型只能提交 Runnable 無(wú)返回值任務(wù)可提交 Runnable + Callable 有返回值任務(wù)
使用場(chǎng)景執(zhí)行不需要結(jié)果、不關(guān)心異常的異步任務(wù)執(zhí)行需要結(jié)果、需要捕獲異常的異步任務(wù)
方法歸屬定義在 Executor 頂層接口定義在 ExecutorService 子接口
源碼設(shè)計(jì)最基礎(chǔ)的任務(wù)提交方法基于 execute() 封裝,功能更強(qiáng)

二、詳細(xì)解析

1. 返回值區(qū)別(最核心)

  • execute()void,提交后無(wú)法跟蹤任務(wù)是否執(zhí)行完成、無(wú)法獲取結(jié)果。
  • submit():返回 Future 對(duì)象,可通過(guò)它:
    • 判斷任務(wù)是否完成
    • 取消任務(wù)
    • 獲取任務(wù)執(zhí)行結(jié)果
    • 獲取任務(wù)拋出的異常

2. 異常處理區(qū)別(關(guān)鍵坑點(diǎn))

  • execute():任務(wù)拋出未捕獲異常時(shí),直接打印堆棧、終止線程,線程會(huì)從線程池被移除。
  • submit():無(wú)論任務(wù)拋什么異常,都不會(huì)直接拋出,異常會(huì)被存起來(lái),只有調(diào)用 Future.get() 時(shí)才會(huì)拋出。

3. 支持的任務(wù)類型區(qū)別

  • execute():僅支持 Runnable(無(wú)返回值)。
  • submit():支持兩種任務(wù):
    1. Runnable(無(wú)返回值)
    2. Callable<T>有返回值,能拋異常)

三、實(shí)戰(zhàn)代碼示例

1. execute() 使用

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ExecuteDemo {
    public static void main(String[] args) {
        ExecutorService pool = Executors.newSingleThreadExecutor();
        
        // 提交無(wú)返回值任務(wù)
        pool.execute(() -> {
            System.out.println("execute 執(zhí)行任務(wù)");
            // 異常會(huì)直接拋出,導(dǎo)致線程死亡
            // int i = 1 / 0;
        });
        
        pool.shutdown();
    }
}

? 適用:日志打印、消息發(fā)送、異步更新緩存等不需要結(jié)果、不關(guān)心異常的任務(wù)。

2. submit() 使用(獲取返回值)

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class SubmitDemo {
    public static void main(String[] args) throws Exception {
        ExecutorService pool = Executors.newSingleThreadExecutor();

        // 提交 Callable 任務(wù),有返回值
        Future<Integer> future = pool.submit(new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                System.out.println("submit 執(zhí)行任務(wù)");
                return 1 + 1; // 返回結(jié)果
            }
        });

        // 獲取任務(wù)結(jié)果(阻塞等待)
        Integer result = future.get();
        System.out.println("任務(wù)結(jié)果:" + result); // 輸出 2

        pool.shutdown();
    }
}

? 適用:異步計(jì)算、接口并行調(diào)用、需要獲取執(zhí)行結(jié)果/處理異常的任務(wù)。

3. submit() 異常處理演示

Future<Integer> future = pool.submit(() -> {
    System.out.println("submit 任務(wù)");
    int i = 1 / 0; // 拋異常
    return 100;
});

// 異常不會(huì)直接拋出!
// 只有調(diào)用 get() 才會(huì)拋出 ExecutionException
try {
    future.get();
} catch (Exception e) {
    System.out.println("捕獲到異常:" + e.getCause());
}

四、底層原理(簡(jiǎn)單理解)

submit() 本質(zhì)是對(duì) execute() 的封裝

  1. 把任務(wù)包裝成 FutureTask(同時(shí)實(shí)現(xiàn) Runnable + Future
  2. 調(diào)用 execute() 提交
  3. 執(zhí)行結(jié)果/異常存入 FutureTask,通過(guò) get() 獲取

五、如何選擇?

  1. 只用 execute()
    任務(wù)不需要返回值、異常自己處理(try-catch)、不關(guān)心執(zhí)行狀態(tài)。
  2. 必須用 submit()
    • 需要獲取任務(wù)結(jié)果
    • 需要判斷任務(wù)是否完成/取消任務(wù)
    • 需要統(tǒng)一捕獲任務(wù)異常
    • 提交 Callable 帶返回值的任務(wù)

總結(jié)

  1. execute():輕量、無(wú)返回、異常直接拋 → 適合簡(jiǎn)單異步執(zhí)行。
  2. submit():強(qiáng)大、有返回、可捕獲異常 → 適合需要結(jié)果/管控的任務(wù)。
  3. 日常開(kāi)發(fā):簡(jiǎn)單任務(wù)用 execute,復(fù)雜任務(wù)用 submit + Future。

以上就是Java線程池execute()和submit()的對(duì)比詳解的詳細(xì)內(nèi)容,更多關(guān)于Java線程池execute()和submit()對(duì)比的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決引用jip-common jar包,報(bào)401 Unauthorized錯(cuò)誤問(wèn)題

    解決引用jip-common jar包,報(bào)401 Unauthorized錯(cuò)誤問(wèn)題

    這篇文章主要介紹了解決引用jip-common jar包,報(bào)401 Unauthorized錯(cuò)誤問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 在IDEA中創(chuàng)建跑得起來(lái)的Springboot項(xiàng)目

    在IDEA中創(chuàng)建跑得起來(lái)的Springboot項(xiàng)目

    這篇文章主要介紹了在IDEA中創(chuàng)建跑得起來(lái)的Springboot項(xiàng)目的圖文教程,需要的朋友可以參考下
    2018-04-04
  • 深入了解Spring中的依賴注入DI

    深入了解Spring中的依賴注入DI

    這篇文章主要介紹了Spring?中的依賴注入,包括注入的方式,寫法,該選擇哪個(gè)注入方式以及可能出現(xiàn)的循環(huán)依賴問(wèn)題等內(nèi)容,需要的可以參考一下
    2023-06-06
  • Spring Security OAuth2.0登出的實(shí)現(xiàn)

    Spring Security OAuth2.0登出的實(shí)現(xiàn)

    本文主要介紹了Spring Security OAuth2.0登出的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • Java使用Apache Batik實(shí)現(xiàn)將SVG轉(zhuǎn)換為PNG

    Java使用Apache Batik實(shí)現(xiàn)將SVG轉(zhuǎn)換為PNG

    在項(xiàng)目中經(jīng)常需要將 SVG 圖標(biāo)或圖形轉(zhuǎn)換為 PNG 格式,Apache Batik 是一個(gè)強(qiáng)大的 SVG 處理庫(kù),可以輕松實(shí)現(xiàn) SVG → PNG 的轉(zhuǎn)換,下面我們就來(lái)看看具體實(shí)現(xiàn)方法吧
    2026-01-01
  • Spring AI接入OpenAI超時(shí)報(bào)錯(cuò)401/429的原因和解決方案

    Spring AI接入OpenAI超時(shí)報(bào)錯(cuò)401/429的原因和解決方案

    本文提供了SpringAI接入OpenAI時(shí)常見(jiàn)的超時(shí)報(bào)錯(cuò)排查清單,并給出了完整解決代碼,主要了三個(gè)常見(jiàn)錯(cuò)誤:APIKey問(wèn)題、速率限制和超時(shí)問(wèn)題,還了詳細(xì)的解決步驟和驗(yàn)證方法,并強(qiáng)調(diào)生產(chǎn)環(huán)境要避免硬編碼APIKey、添加限流和重試機(jī)制,需要的朋友可以參考下
    2026-05-05
  • java按照模板導(dǎo)出pdf或word文件詳細(xì)代碼

    java按照模板導(dǎo)出pdf或word文件詳細(xì)代碼

    有時(shí)候業(yè)務(wù)中我們需要使用pdf模板生成一份pdf文件,下面這篇文章主要給大家介紹了關(guān)于java按照模板導(dǎo)出pdf或word文件的相關(guān)資料,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-11-11
  • 淺析Java中的訪問(wèn)控制權(quán)限

    淺析Java中的訪問(wèn)控制權(quán)限

    這篇文章主要介紹了淺析Java中的訪問(wèn)控制權(quán)限,在Java中,提供了四種訪問(wèn)權(quán)限控制,分別是默認(rèn)訪問(wèn)權(quán)限、public、private以及protected,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Java中日期與時(shí)間的處理及工具類封裝詳解

    Java中日期與時(shí)間的處理及工具類封裝詳解

    在項(xiàng)目開(kāi)發(fā)中免不了有對(duì)日期時(shí)間的處理,但Java中關(guān)于日期時(shí)間的類太多了,本文就來(lái)介紹一下各種類的使用及我們項(xiàng)目中應(yīng)該怎么選擇吧
    2023-07-07
  • Java滾動(dòng)數(shù)組計(jì)算編輯距離操作示例

    Java滾動(dòng)數(shù)組計(jì)算編輯距離操作示例

    這篇文章主要介紹了Java滾動(dòng)數(shù)組計(jì)算編輯距離操作,涉及java字符串與數(shù)組的遍歷、計(jì)算、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12

最新評(píng)論

淮北市| 蕲春县| 文水县| 芦山县| 孟津县| 枞阳县| 来宾市| 安岳县| 崇礼县| 灵寿县| 绥宁县| 陈巴尔虎旗| 辽宁省| 申扎县| 化州市| 安多县| 资溪县| 綦江县| 普兰县| 江门市| 吉木乃县| 怀仁县| 八宿县| 东乡族自治县| 桑植县| 章丘市| 天柱县| 苍南县| 瑞丽市| 瓦房店市| 花莲县| 敖汉旗| 永胜县| 石台县| 鄱阳县| 唐河县| 扎赉特旗| 万载县| 通化县| 正阳县| 大埔区|