欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java異步線程中的CompletableFuture與@Async詳解

 更新時間:2024年01月19日 09:12:44   作者:景慶197  
這篇文章主要介紹了Java異步線程中的CompletableFuture與@Async詳解,CompletableFuture是java中提供的一個異步執(zhí)行類,@Async是Spring提供的異步執(zhí)行方法,當調(diào)用方法單獨開啟一個線程進行調(diào)用,需要的朋友可以參考下

引言

1.CompletableFuture是java中提供的一個異步執(zhí)行類,@Async是Spring提供的異步執(zhí)行方法,當調(diào)用方法單獨開啟一個線程進行調(diào)用。

2.@Async通常指定一個方法使用的異步方法調(diào)用,而CompletableFuture可以一個方法體內(nèi)對請求體進行排序組合成鏈式調(diào)用再返回

1.@Async的使用

@Async的粒度比較大,在使用的時候只能添加到方法上,并且需要自定義線程池。

實現(xiàn):

需要在配置類上添加@Configuration

需要實現(xiàn)AsyncConfigure接口,里面有兩個方法可以重寫[getAsyncExecutor,getAsyncUncaughtExceptionHandler],主要實現(xiàn)的方法是getAsyncExecutor(),

我們當時實現(xiàn)手動注入一個@Bean。

ps:ThreadPoolTaskExecutor設(shè)計模式是:模板方法和策略模式

代碼實現(xiàn):

@Configuration
@EnableAsync
public class AsyncTaskConfig implements AsyncConfigurer {
    @Override
    @Bean
    public Executor getAsyncExecutor() {
        /**
         * ThreadPoolExecutor通用線程池
         * ThreadPoolTaskExecutor 是再ThradPoolExecutor上面做增強,支持業(yè)務(wù)執(zhí)行任務(wù)、支持定時任務(wù)、spring的線程管理等
         */
        ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
        threadPoolTaskExecutor.setCorePoolSize(10);
        threadPoolTaskExecutor.setMaxPoolSize(100);
        threadPoolTaskExecutor.setQueueCapacity(10);
        // 設(shè)置線程池全部結(jié)束的時候才完全關(guān)閉線程
        threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
        // 當線程關(guān)閉的時候需要等待多長時間才進行關(guān)閉
        threadPoolTaskExecutor.setAwaitTerminationSeconds(60);
        // 設(shè)置線程的名字
        threadPoolTaskExecutor.setThreadNamePrefix("Rabbit-Async-");
        // 進行初始化
        threadPoolTaskExecutor.initialize();
        return threadPoolTaskExecutor;
    }
// 需要實現(xiàn)AsynConfiguration的兩個方法
    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return null;
    }
}

2.CompletableFuture總體架構(gòu)

Future 它是java5添加的接口,用來描述一個異步計算的結(jié)果,可以用isDone方法來計算是否完成,或者使用get阻塞往效用線程,直到計算返回結(jié)果,可以使用Cancel方法停止任務(wù)執(zhí)行。

CompletableFuture實現(xiàn)Furure接口,不推薦使用get方式阻塞或者輪詢方式獲取結(jié)果。

CompletableFuture.supplyAsync(Runnable,Executor);//支持返回值

CompletableFutre.runAsync(Runnable,Executor);//不支持返回值

3.計算完成時回調(diào)方法

whenComplete(BigConsumer):同步完成正常處理結(jié)果

whenCompleteAsync(BigConsumer):異步完成處理結(jié)果

whenCompleteAysnc(BigConsumer,Executor):異步完成處理結(jié)果

exceptionally(Function):處理異常結(jié)果

串行化與并行化

串行化:程序從上到下執(zhí)行的都是一個循序

并行化:從上到下執(zhí)行順序不一定

串行化案例

thenApply方法(有返回值):當一個線程依賴另一個線程是,獲取上一個任務(wù)返回結(jié)果,并返回當前任務(wù)的返回值

thenAccept方法(無返回值):接受任務(wù)的處理結(jié)果,并消費處理,無返回值結(jié)果。

thenRun方法(最后執(zhí)行):只有上面的任務(wù)執(zhí)行完成,就開始執(zhí)行thenRun,只是處理完任務(wù)后執(zhí)行thenRun的后續(xù)操作。

 并行化案例:

多任務(wù)組合

allof().join();:等待所有任務(wù)完成之后返回

anyof():只有一個任務(wù)完成

到此這篇關(guān)于Java異步線程中的CompletableFuture與@Async詳解的文章就介紹到這了,更多相關(guān)CompletableFuture與@Async內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java方法的參數(shù)傳遞機制詳解

    Java方法的參數(shù)傳遞機制詳解

    這篇文章主要介紹了Java方法的參數(shù)傳遞機制詳解,對于Java初學者來說,剛學習Java的時候可能經(jīng)常會聽到調(diào)用方法時參數(shù)的值傳遞與引用傳遞,但是,實際上Java中方法的參數(shù)傳遞機制只有值傳遞,需要的朋友可以參考下
    2024-01-01
  • 使用Java制作一個簡單的記事本

    使用Java制作一個簡單的記事本

    本文給大家?guī)淼氖鞘褂肑ava制作一個簡單的記事本的代碼,有相同需要的朋友可以參考下
    2015-02-02
  • Java的Comparable,Comparator和Cloneable三大接口詳解

    Java的Comparable,Comparator和Cloneable三大接口詳解

    這篇文章主要為大家詳細介紹了Java的Comparable,Comparator和Cloneable的接口,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • java抽象類和接口定義與用法詳解

    java抽象類和接口定義與用法詳解

    這篇文章主要介紹了java抽象類和接口定義與用法,結(jié)合實例形式詳細分析了java抽象類和接口的基本概念、原理、定義、使用方法及操作注意事項,需要的朋友可以參考下
    2020-02-02
  • 通過簡單方法實現(xiàn)spring boot web項目

    通過簡單方法實現(xiàn)spring boot web項目

    這篇文章主要介紹了通過簡單方法實現(xiàn)spring boot web項目,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • Java調(diào)用第三方http接口的四種方式總結(jié)

    Java調(diào)用第三方http接口的四種方式總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java調(diào)用第三方http接口的四種方式,在實際開發(fā)中我們經(jīng)常會與第三方公司進行合作,接入第三方接口,文中給出了詳細的代碼實例,需要的朋友可以參考下
    2023-08-08
  • Spring注解之@PropertySource詳解

    Spring注解之@PropertySource詳解

    這篇文章主要介紹了Spring注解之@PropertySource詳解,@PropertySource注解用于指定資源文件讀取的位置,它不僅能讀取properties文件,也能讀取xml文件,并且通過YAML解析器,配合自定義PropertySourceFactory實現(xiàn)解析YAML文件,需要的朋友可以參考下
    2023-11-11
  • Java代碼性能優(yōu)化的35個方法總結(jié)

    Java代碼性能優(yōu)化的35個方法總結(jié)

    本篇文章主要介紹了Java代碼性能優(yōu)化的35個方法,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Java有序的Map LinkedHashMap用法詳解

    Java有序的Map LinkedHashMap用法詳解

    LinkedHashMap是Java提供的一個集合類,它繼承自HashMap,并在HashMap基礎(chǔ)上維護一條雙向鏈表,本文給大家介紹java 有序的Map LinkedHashMap簡介,感興趣的朋友一起看看吧
    2024-01-01
  • java如何使用正則表達式限制特殊字符的個數(shù)

    java如何使用正則表達式限制特殊字符的個數(shù)

    這篇文章主要介紹了java如何使用正則表達式限制特殊字符的個數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論