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

java 快速實(shí)現(xiàn)異步調(diào)用的操作方法

 更新時(shí)間:2023年07月31日 14:32:31   作者:SoftwareDevOps  
這篇文章主要介紹了java 如何快速實(shí)現(xiàn)異步調(diào)用方法,今天我們就來了解下 CompletableFuture,它Java 8引入的一種功能強(qiáng)大的異步編程工具,可以用于實(shí)現(xiàn)復(fù)雜的異步操作和處理鏈?zhǔn)降漠惒饺蝿?wù),需要的朋友可以參考下

什么是異步編程

在實(shí)現(xiàn)異步調(diào)用之前,我們先了解一下,什么是異步編程?什么場(chǎng)景下適用等等情況。

我們都知道,在傳統(tǒng)的同步編程中,當(dāng)一個(gè)操作開始執(zhí)行時(shí),程序會(huì)阻塞并等待該操作完成,然后才能繼續(xù)執(zhí)行后續(xù)代碼。這種阻塞等待的方式可能會(huì)導(dǎo)致程序響應(yīng)性能下降,因?yàn)樵诘却倪^程中無法同時(shí)處理其他任務(wù)。這種顯而易見的,在某種耗時(shí)的場(chǎng)景下,就顯得無用了,甚至很影響體驗(yàn)。

如文件讀寫、網(wǎng)絡(luò)請(qǐng)求或計(jì)算密集型任務(wù),再如人臉融合特效等等,都是耗時(shí)的操作,這個(gè)時(shí)候,我們就需要異步編程了。

異步編程則不會(huì)阻塞程序的執(zhí)行,它將耗時(shí)的操作提交給后臺(tái)線程或其他執(zhí)行環(huán)境,并立即返回,使得程序可以繼續(xù)執(zhí)行其他任務(wù)。當(dāng)耗時(shí)操作完成后,會(huì)通過回調(diào)、事件或者輪詢等方式通知主線程,主線程再去處理操作結(jié)果或執(zhí)行相應(yīng)的回調(diào)函數(shù)。

CompletableFuture

今天我們就來了解下 CompletableFuture,它Java 8引入的一種功能強(qiáng)大的異步編程工具,可以用于實(shí)現(xiàn)復(fù)雜的異步操作和處理鏈?zhǔn)降漠惒饺蝿?wù)。

在這里插入圖片描述

從這個(gè)JDK里,可以看出,它既實(shí)現(xiàn)了 Future 接口,擁有 Future 所有的特性,比如可以使用 get() 方法獲取返回值等。

也實(shí)現(xiàn)了CompletionStage接口,提供了豐富的方法來管理異步任務(wù)的執(zhí)行和處理任務(wù)結(jié)果。并且這些接口多達(dá)40多個(gè),完全足夠我們?nèi)粘K褂昧恕?/p>

1. supplyAsync

 CompletableFuture<T> supplyAsync(Supplier<? extends T> supplier)

該方法接受一個(gè)Supplier函數(shù)式接口作為參數(shù),用于執(zhí)行一個(gè)有返回值的異步任務(wù)。返回一個(gè)CompletableFuture對(duì)象,可以用于獲取異步任務(wù)的執(zhí)行結(jié)果。

參數(shù):

Supplier:一個(gè)無參的函數(shù)式接口,用于提供異步任務(wù)的結(jié)果。

2. runAsync

CompletableFuture<Void> runAsync(Runnable runnable)

該方法接受一個(gè)Runnable函數(shù)式接口作為參數(shù),用于執(zhí)行一個(gè)無返回值的異步任務(wù)。返回一個(gè)CompletableFuture對(duì)象,可以用于等待異步任務(wù)完成。

參數(shù):Runnable:一個(gè)無參的函數(shù)式接口,用于執(zhí)行異步任務(wù)。

3. thenApply

CompletableFuture<T> thenApply(Function<? super T,? extends U> function)

該方法接受一個(gè)Function函數(shù)式接口作為參數(shù),用于對(duì)CompletableFuture的結(jié)果進(jìn)行處理,并返回新的CompletableFuture對(duì)象。

參數(shù):Function:一個(gè)帶有一個(gè)參數(shù)的函數(shù)式接口,用于對(duì)異步任務(wù)的結(jié)果進(jìn)行轉(zhuǎn)換或處理。

4. thenAccept

CompletableFuture<Void> thenAccept(Consumer<? super T> consumer)

該方法接受一個(gè)Consumer函數(shù)式接口作為參數(shù),用于對(duì)CompletableFuture的結(jié)果進(jìn)行消費(fèi),沒有返回值

參數(shù):

Consumer:一個(gè)帶有一個(gè)參數(shù)的函數(shù)式接口,用于消費(fèi)異步任務(wù)的結(jié)果。

5. thenRun

CompletableFuture<Void> thenRun(Runnable action)

該方法接受一個(gè)Runnable函數(shù)式接口作為參數(shù),用于在CompletableFuture的結(jié)果完成后執(zhí)行指定的操作,沒有返回值。

參數(shù):BiFunction:一個(gè)帶有兩個(gè)參數(shù)的函數(shù)式接口,用于合并兩個(gè)CompletableFuture的結(jié)果。

6. thenCombine

CompletableFuture<U> thenCombine(CompletionStage<? extends V> other, BiFunction<? super T,? super U,? extends V> fn)

該方法接受一個(gè)CompletionStage對(duì)象和一個(gè)BiFunction函數(shù)式接口作為參數(shù),用于等待當(dāng)前CompletableFuture和另一個(gè)CompletionStage對(duì)象都完成后,將其結(jié)果進(jìn)行組合處理,并返回新的CompletableFuture對(duì)象。

參數(shù):

CompletionStage:代表一個(gè)異步任務(wù)的執(zhí)行狀態(tài)。

返回值:

  • CompletableFuture<T>:表示一個(gè)異步任務(wù)的結(jié)果,可以通過該對(duì)象獲取異步任務(wù)的執(zhí)行結(jié)果。
  • CompletableFuture<Void>:表示一個(gè)異步任務(wù)的結(jié)果,沒有返回值。

java 演示

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureExample {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 使用supplyAsync方法創(chuàng)建一個(gè)CompletableFuture對(duì)象來執(zhí)行有返回值的異步任務(wù)
        CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
            System.out.println("異步任務(wù)正在執(zhí)行");
            return 100;
        });
        // 使用thenApply方法對(duì)異步任務(wù)的結(jié)果進(jìn)行處理,并返回新的CompletableFuture對(duì)象
        CompletableFuture<String> processedFuture = future.thenApply(result -> {
            System.out.println("對(duì)異步任務(wù)結(jié)果進(jìn)行處理");
            return "處理后的結(jié)果:" + result * 2;
        });
        // 使用get方法阻塞當(dāng)前線程,并獲取異步任務(wù)的執(zhí)行結(jié)果
        String result = processedFuture.get();
        System.out.println(result);
    }
}

異步任務(wù)正在執(zhí)行
對(duì)異步任務(wù)結(jié)果進(jìn)行處理
處理后的結(jié)果:200

到此這篇關(guān)于java 如何快速實(shí)現(xiàn)異步調(diào)用方法的文章就介紹到這了,更多相關(guān)java異步調(diào)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot實(shí)現(xiàn)string轉(zhuǎn)json json里面帶數(shù)組

    springboot實(shí)現(xiàn)string轉(zhuǎn)json json里面帶數(shù)組

    這篇文章主要介紹了springboot實(shí)現(xiàn)string轉(zhuǎn)json json里面帶數(shù)組,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • springsecurity第三方授權(quán)認(rèn)證的項(xiàng)目實(shí)踐

    springsecurity第三方授權(quán)認(rèn)證的項(xiàng)目實(shí)踐

    Spring security 是一個(gè)強(qiáng)大的和高度可定制的身份驗(yàn)證和訪問控制框架,本文主要介紹了springsecurity第三方授權(quán)認(rèn)證的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣可以了解一下
    2023-08-08
  • 4個(gè)Java8中你需要知道的函數(shù)式接口分享

    4個(gè)Java8中你需要知道的函數(shù)式接口分享

    Java?8?中提供了許多函數(shù)式接口,包括Function、Consumer、Supplier、Predicate?等等。本文主要來和大家介紹一下它們的具體使用,需要的可以參考一下
    2023-04-04
  • Spring MVC 攔截器實(shí)現(xiàn)登錄

    Spring MVC 攔截器實(shí)現(xiàn)登錄

    這篇文章主要介紹了Spring MVC 攔截器實(shí)現(xiàn)登錄,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java爬蟲抓取視頻網(wǎng)站下載鏈接

    Java爬蟲抓取視頻網(wǎng)站下載鏈接

    本文是通過JAVA獲取優(yōu)酷、土豆、酷6、6間房等視頻,小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-10-10
  • 淺談Java 8 新增函數(shù)式接口到底是什么

    淺談Java 8 新增函數(shù)式接口到底是什么

    這篇文章主要介紹了淺談Java 8 新增函數(shù)式接口到底是什么,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • 一篇文章帶你深入了解Java基礎(chǔ)

    一篇文章帶你深入了解Java基礎(chǔ)

    這篇文章主要給大家介紹了關(guān)于Java中方法使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • Java封裝數(shù)組之添加元素操作實(shí)例分析

    Java封裝數(shù)組之添加元素操作實(shí)例分析

    這篇文章主要介紹了Java封裝數(shù)組之添加元素操作,結(jié)合實(shí)例形式分析了Java封裝數(shù)組實(shí)現(xiàn)元素追加、插入等相關(guān)操作技巧,需要的朋友可以參考下
    2020-03-03
  • java+Okhttp3調(diào)用接口的實(shí)例

    java+Okhttp3調(diào)用接口的實(shí)例

    這篇文章主要介紹了java+Okhttp3調(diào)用接口的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Spring Boot連接超時(shí)導(dǎo)致502錯(cuò)誤的實(shí)戰(zhàn)案例

    Spring Boot連接超時(shí)導(dǎo)致502錯(cuò)誤的實(shí)戰(zhàn)案例

    這篇文章主要給大家介紹了關(guān)于Spring Boot連接超時(shí)導(dǎo)致502錯(cuò)誤的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評(píng)論