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

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

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

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

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

1、execute

1.1、定義

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

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),線程池會捕獲異常并打印堆棧信息,但調(diào)用者無法直接獲取異常。

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

?

2、submit

2.1、介紹

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

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

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

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,可以通過第三個參數(shù)指定返回值(result)。

返回值

  • 返回Future對象,用于跟蹤任務(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、異常處理

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

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

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

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

心得

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

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

總結(jié)

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

相關(guān)文章

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

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

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

    RabbitMQ使用SpringAMQP的配置方法

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

    Java字符串中刪除指定子字符串的方法簡介

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

    java簡單實現(xiàn)自定義日歷

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

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

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

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

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

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

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

    SpringBoot增強Controller方法@ControllerAdvice注解的使用詳解

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

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

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

    Java返回可變引用對象問題整理

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

最新評論

丰县| 佳木斯市| 资兴市| 武义县| 武功县| 宿迁市| 潜山县| 新化县| 南郑县| 前郭尔| 浮梁县| 桂阳县| 华安县| 上犹县| 鹿邑县| 日土县| 普兰县| 永川市| 普定县| 榆林市| 诏安县| 泗水县| 忻城县| 蕲春县| 合山市| 垣曲县| 南丹县| 岳阳县| 凤台县| 库伦旗| 金塔县| 营山县| 南宁市| 巨野县| 哈尔滨市| 香格里拉县| 鹤庆县| 高陵县| 蚌埠市| 德令哈市| 墨竹工卡县|