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

解讀線程池中submit()和execute()區(qū)別與聯(lián)系

 更新時(shí)間:2025年06月30日 08:49:24   作者:找不到、了  
這篇文章主要介紹了線程池中submit()和execute()區(qū)別與聯(lián)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

關(guān)于線程池的繼承關(guān)系可參考:

在 Java 的線程池中,submit()和execute()都是用來向線程池提交任務(wù)的方法。區(qū)別在于任務(wù)類型支持、返回值異常處理機(jī)制。

1、execute

1.1、定義

execute()是Executor接口(ExecutorService繼承自它)中定義的方法,只能提交Runnable任務(wù),沒有返回值不能獲取任務(wù)執(zhí)行結(jié)果,如果任務(wù)拋出異常,異常會(huì)由線程池的未捕獲異常處理器處理。

1.2、方法

execute(Runnable command)

  • 定義:來自Executor接口(ExecutorService繼承自它)。
  • 參數(shù):僅接受Runnable類型的任務(wù)。
  • 返回值:無返回值(void)。

代碼示例如下:

ExecutorService threadPool = Executors.newFixedThreadPool(2);
    
threadPool.execute(()->{
    System.out.println("hello execute");
});

1.3、異常處理

如果Runnable拋出未檢查異常(如RuntimeException),線程池會(huì)捕獲異常并打印堆棧信息,但調(diào)用者無法直接獲取異常。

?
executor.execute(() -> {
    throw new RuntimeException("Error in execute()");
});
// 調(diào)用者無法捕獲此異常

?

2、submit

2.1、介紹

submit() 是ExeCutorSevice 接口中定義的方法。

可以提交Runnable和Callable任務(wù),返回**Future**對(duì)象,可以用來獲取任務(wù)執(zhí)行結(jié)果或取消任務(wù)。

對(duì)于**Runnable**任務(wù),返回的**Future****在任務(wù)完成后會(huì)返回null,**異常會(huì)被捕獲并存儲(chǔ)在Future中,只有在調(diào)用Future.get()時(shí)才會(huì)拋出。

2.2、方法重載形式

<T> Future<T> submit(Callable<T> task);
Future<?> submit(Runnable task);
<T> Future<T> submit(Runnable task, T result);

參數(shù)

  • 支持Runnable和Callable兩種任務(wù)類型。
  • 如果是Runnable,可以通過第三個(gè)參數(shù)指定返回值(result)。

返回值

  • 返回Future對(duì)象,用于跟蹤任務(wù)狀態(tài)、獲取結(jié)果或取消任務(wù)。

1、Future<?> submit(Runnable task);

     Future<?> submit = threadPool.submit(() -> {
            System.out.println("hello submit1");
        });

        try {
            submit.get();
        } catch (Exception e) {
            e.printStackTrace();
        }

2、<T> Future<T> submit(Runnable task, T result);

        Future<String> submit1 = threadPool.submit(() -> {
            System.out.println("hello submit2");

        }, "submit");

        try {
            String object = (String) submit1.get();
            System.out.println("object=="+object);
        } catch (Exception e) {
            e.printStackTrace();
        }

3、<T> Future<T> submit(Callable<T> task);

        Future<Integer> submit2 = threadPool.submit(() -> {
            return 1;
        });

        try {
            Integer integer = submit2.get();
            System.out.println("integer=="+integer);
        } catch (Exception e) {
            e.printStackTrace();
        }

2.3、異常處理

異常會(huì)被封裝在ExecutionException中,通過Future.get()拋出,調(diào)用者可以顯式處理。

Future<?> future = executor.submit(() -> {
    throw new RuntimeException("Error in submit()");
});

try {
    future.get(); // 會(huì)拋出 ExecutionException
} catch (ExecutionException e) {
    System.out.println("Caught exception: " + e.getCause().getMessage());
}

3、核心區(qū)別對(duì)比

心得

  • 優(yōu)先使用submit():在大多數(shù)實(shí)際場(chǎng)景中,submit()提供了更強(qiáng)大的功能(如結(jié)果獲取、異常處理)。
  • 關(guān)閉線程池:任務(wù)提交完成后,調(diào)用executor.shutdown()或executor.shutdownNow()釋放資源。
  • 避免資源泄漏:確保線程池正確關(guān)閉,尤其是長(zhǎng)期運(yùn)行的應(yīng)用程序。

通過合理選擇execute()和submit(),可以靈活控制任務(wù)的執(zhí)行和管理,滿足不同業(yè)務(wù)需求。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入了解Java語言中的并發(fā)性選項(xiàng)有何不同

    深入了解Java語言中的并發(fā)性選項(xiàng)有何不同

    這篇文章主要介紹了深入了解Java語言中的并發(fā)性選項(xiàng)有何不同,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2019-06-06
  • RabbitMQ使用SpringAMQP的配置方法

    RabbitMQ使用SpringAMQP的配置方法

    這篇文章主要介紹了RabbitMQ使用SpringAMQP的配置方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-03-03
  • Java字符串中刪除指定子字符串的方法簡(jiǎn)介

    Java字符串中刪除指定子字符串的方法簡(jiǎn)介

    這篇文章主要介紹了Java字符串中刪除指定子字符串的方法,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-11-11
  • java簡(jiǎn)單實(shí)現(xiàn)自定義日歷

    java簡(jiǎn)單實(shí)現(xiàn)自定義日歷

    這篇文章主要為大家詳細(xì)介紹了java簡(jiǎn)單實(shí)現(xiàn)自定義日歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Spring Boot Web應(yīng)用開發(fā) CORS 跨域請(qǐng)求支持

    Spring Boot Web應(yīng)用開發(fā) CORS 跨域請(qǐng)求支持

    本篇文章主要介紹了Spring Boot Web應(yīng)用開發(fā) CORS 跨域請(qǐng)求支持,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java調(diào)用通義千問API的詳細(xì)步驟

    Java調(diào)用通義千問API的詳細(xì)步驟

    這篇文章主要介紹了在Java中接入通義千問API的步驟,包括獲取APIKey、添加依賴、配置模型和流式響應(yīng)等,并提供了響應(yīng)處理和高級(jí)功能實(shí)現(xiàn)示例,以及常見問題解決方案,需要的朋友可以參考下
    2026-03-03
  • Java面試題沖刺第二十五天--并發(fā)編程3

    Java面試題沖刺第二十五天--并發(fā)編程3

    這篇文章主要為大家分享了最有價(jià)值的三道關(guān)于并發(fā)編程的面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-08-08
  • SpringBoot增強(qiáng)Controller方法@ControllerAdvice注解的使用詳解

    SpringBoot增強(qiáng)Controller方法@ControllerAdvice注解的使用詳解

    這篇文章主要介紹了SpringBoot增強(qiáng)Controller方法@ControllerAdvice注解的使用詳解,@ControllerAdvice,是Spring3.2提供的新注解,它是一個(gè)Controller增強(qiáng)器,可對(duì)controller進(jìn)行增強(qiáng)處理,需要的朋友可以參考下
    2023-10-10
  • Springboot + Mysql8實(shí)現(xiàn)讀寫分離功能

    Springboot + Mysql8實(shí)現(xiàn)讀寫分離功能

    這篇文章主要介紹了Springboot + Mysql8實(shí)現(xiàn)讀寫分離功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java返回可變引用對(duì)象問題整理

    Java返回可變引用對(duì)象問題整理

    在本篇文章里小編給大家分享的是關(guān)于Java返回可變引用對(duì)象問題整理內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-04-04

最新評(píng)論

宁津县| 汝阳县| 大冶市| 枣阳市| 和政县| 巴彦淖尔市| 二连浩特市| 安平县| 大埔区| 东乌珠穆沁旗| 衡阳县| 曲靖市| 会同县| 丰台区| 宜君县| 安仁县| 册亨县| 诸暨市| 渭南市| 丘北县| 疏勒县| 布拖县| 桐乡市| 泰州市| 静海县| 湖北省| 当雄县| 竹溪县| 合阳县| 宁明县| 高雄市| 德阳市| 宝坻区| 萝北县| 京山县| 呈贡县| 曲阳县| 滨海县| 吉安市| 中方县| 山丹县|