中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

阿里自助建站平臺/網(wǎng)站優(yōu)化公司收費

阿里自助建站平臺,網(wǎng)站優(yōu)化公司收費,wordpress acf主題選項,網(wǎng)絡(luò)規(guī)劃設(shè)計師教程電子版2023CompletableFuture(可完成的Future) 一個可完成的Future,在我們調(diào)用他的get方法的時候,他會阻塞等待這個任務(wù)完成來獲取他的結(jié)果。 當然也可以為這個任務(wù)注冊一些回調(diào),類似于完成時,出現(xiàn)異常時,…

CompletableFuture(可完成的Future)

一個可完成的Future,在我們調(diào)用他的get方法的時候,他會阻塞等待這個任務(wù)完成來獲取他的結(jié)果。
當然也可以為這個任務(wù)注冊一些回調(diào),類似于完成時,出現(xiàn)異常時,或者執(zhí)行超時等額外處理。

使用

CompletableFuture.suppleAsync

異步執(zhí)行一個任務(wù)并返回結(jié)果

CompletableFuture.runAsync

異步執(zhí)行一個任務(wù)不返回結(jié)果

這兩方法都可以為我們快速的創(chuàng)建一個CompletableFuture對象

CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> {System.out.println(Thread.currentThread().getName() + ":supplyAsync start");return "supplyAsync";
});CompletableFuture<String> completableFuture = CompletableFuture.runAsync(() -> {System.out.println(Thread.currentThread().getName() + ":runAsync start");return "runAsync";
});

這兩個方法都是可以有第二個參數(shù)的,也就是可以執(zhí)行線程池,這里默認是**Fork-Join-Pool**(一個可以將一個大任務(wù)很自然的分解為多個子任務(wù)的線程池)。

回調(diào)有哪些

方法參數(shù)描述
thenApplyT -> U對結(jié)果進行處理,并返回一個新的結(jié)果
thenAccpetT -> void對結(jié)果進行處理,返回結(jié)果為Void
thenComposeT -> CompletableFuture對結(jié)果調(diào)用這個函數(shù)來進行處理,并返回一個新的結(jié)果
handle(T,Throwable) -> U與thenApply類似,但是他可以處理異常,根據(jù)異常對象是否為null,可以判斷是否出現(xiàn)異常。
不報錯也會執(zhí)行
whenCompletable(T,Throwable) -> void類似handle 但是不返回結(jié)果
不報錯也會執(zhí)行
exceptionallyThrowable -> U出現(xiàn)異常時,返回一個結(jié)果
報錯時才會執(zhí)行。
completableOnTimeoutT, long, TimeUnit如果超時返回一個指定的結(jié)果。
超時后的鏈式操作都不執(zhí)行
orTimeoutlong, TimeUnit超時返回一個異常 TimeOutException
超時后的鏈式操作都不執(zhí)行
thenRunRunable執(zhí)行Runable,返回void,對于不需要任務(wù)的返回結(jié)果

示例

private static final ThreadPoolExecutor THREAD_POOL_EXECUTOR = new ThreadPoolExecutor(10, 10, 1, TimeUnit.MINUTES, new ArrayBlockingQueue<>(50));public static void main(String[] args) {CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> {System.out.println(Thread.currentThread().getName() + ":supplyAsync");return "supplyAsync";});completableFuture.thenApply((result) -> {System.out.println(Thread.currentThread().getName() + ":thenApply1 ");return result + "\nthenApply1";}).thenAccept((result) -> {System.out.println(Thread.currentThread().getName() + ":thenAccept ");}).thenCompose(result ->CompletableFuture.supplyAsync(() -> {try {System.out.println(Thread.currentThread().getName() + ":thenCompose ");TimeUnit.SECONDS.sleep(2);} catch (InterruptedException e) {throw new RuntimeException(e);}return result + "\nthenCompose";}))// thenCompose 超時了,orTimeout 之前的的操作都將被忽略 之后的還會執(zhí)行.thenAccept((result) -> {System.out.println(Thread.currentThread().getName() + ":ignore ");})// .completeOnTimeout("completeOnTimeout", 1, TimeUnit.SECONDS)// 這里會拋出一個TimeOutException.orTimeout(1, TimeUnit.SECONDS)// throwable則可以獲取到 TimeOutException .handleAsync((result, throwable) -> {System.out.println(Thread.currentThread().getName() + ":handleAsync  ");if (throwable == null) {return result;}throwable.printStackTrace();return result + "\nhandleAsync";}, THREAD_POOL_EXECUTOR)// 因為TimeOutException 被handleAsync處理了,所以這里也沒有異常了throwable為null.whenComplete((result, throwable) -> {System.out.println(Thread.currentThread().getName() + ":whenComplete  ");if (throwable == null) {return;}throwable.printStackTrace();}).thenRun(() -> {System.out.println(Thread.currentThread().getName() + ":thenRun ");});try {Thread.sleep(5000); // 添加短暫的延遲  因為是異步任務(wù)這里不等待一下的話main線程就終止了} catch (InterruptedException e) {e.printStackTrace();}THREAD_POOL_EXECUTOR.shutdownNow();
}#### 執(zhí)行結(jié)果
ForkJoinPool.commonPool-worker-3:supplyAsync
ForkJoinPool.commonPool-worker-3:thenApply1 
ForkJoinPool.commonPool-worker-3:thenAccept 
ForkJoinPool.commonPool-worker-3:thenCompose 
pool-1-thread-1:handleAsync  
pool-1-thread-1:whenComplete  
pool-1-thread-1:thenRun 
java.util.concurrent.TimeoutException

注意回調(diào)時機即可。

Async回調(diào)

我們這里使用一個叫handleAsync的方法與普通的handle相比,他是執(zhí)行的線程發(fā)送了變化。
使用Async在大多數(shù)情況下都會是在一個新的線程下去幫我們執(zhí)行這個回調(diào),而普通的則是在原有由原有執(zhí)行任務(wù)的線程去執(zhí)行這個回調(diào)。
這里的大多數(shù)情況是指我們在使用自定義線程池的時候。而我們的Fork-Join-Pool可能會為一些短暫的任務(wù)重用相同的線程,以減少線程的創(chuàng)建和銷毀開銷。

get、join

當我們的CompletableFuture提供了返回值的時候,我們可以通過get或者join方法來阻塞的得到這個結(jié)果
與之不同是get他可能會拋出異常,而join不會。通常我們使用join

組合CompletableFuture

可以根據(jù)某種條件去執(zhí)行兩個或者多個CompletableFuture
因為組合太多,這里就簡單描述下我自己比較常用的

方法參數(shù)描述
static allOfCompletableFuture<?>…所以任務(wù)都執(zhí)行完成后完成,返回結(jié)果為void
static anyOfCompletableFuture<?>…任意任務(wù)都執(zhí)行完成后完成,返回結(jié)果為void

示例

public static void main(String[] args) {// 1.兩個任務(wù)都執(zhí)行完成后才完成CompletableFuture.allOf(CompletableFuture.runAsync(()->{System.out.println("supplyAsync1");}),CompletableFuture.runAsync(()->{// 異步任務(wù)等待1秒try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("supplyAsync2");}));// 任意一個完成則完成CompletableFuture.anyOf(CompletableFuture.runAsync(()->{System.out.println("supplyAsync3");}),CompletableFuture.runAsync(()->{// 異步任務(wù)等待2秒try {TimeUnit.SECONDS.sleep(2);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("supplyAsync4");}));// 主線程只等待一秒 try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {throw new RuntimeException(e);}
}### 結(jié)果
supplyAsync1
supplyAsync3
supplyAsync2

allOf 因為需要兩個都完成所以等待一秒后完成輸出supplyAsync1、supplyAsync2
antOf 任意一個完成則算結(jié)束。因為第二個等待兩秒,主線程已經(jīng)結(jié)束了,main已經(jīng)退出了,所以只輸出supplyAsync3

http://www.risenshineclean.com/news/53.html

相關(guān)文章:

  • 如何建立一個網(wǎng)站分享教程/推廣賺傭金的軟件排名
  • 網(wǎng)站設(shè)計寬屏/品牌策略有哪些
  • 網(wǎng)站建設(shè)系統(tǒng)哪個好/seo點擊排名軟件營銷工具
  • 建設(shè)文明網(wǎng) 聯(lián)盟網(wǎng)站的/學(xué)seo推廣
  • 武漢網(wǎng)站建設(shè) loongnet/百度云官網(wǎng)
  • 如何建設(shè)一個屬于自己的網(wǎng)站/引擎優(yōu)化seo
  • 南寧做網(wǎng)站外包/品牌宣傳策略有哪些
  • 怎樣做網(wǎng)站反鏈/北京網(wǎng)站優(yōu)化多少錢
  • 軟件外包收費標準/重慶網(wǎng)站關(guān)鍵詞排名優(yōu)化
  • 網(wǎng)站建設(shè)ppt答辯/seo優(yōu)化包括什么
  • 網(wǎng)站建設(shè)網(wǎng)址網(wǎng)站制作/長沙百度seo
  • 咸寧市住房和城鄉(xiāng)建設(shè)委員會網(wǎng)站/數(shù)字營銷策劃
  • 給網(wǎng)站平臺做推廣叫什么/產(chǎn)品推廣平臺
  • 門戶網(wǎng)站源碼入駐/站長之家收錄查詢
  • 國外b2b網(wǎng)站是什么意思/百度指數(shù)官網(wǎng)
  • 網(wǎng)站做支付需要準備什么東西嗎/seo技術(shù)培訓(xùn)唐山
  • 哪一個景區(qū)網(wǎng)站做的最成熟/營銷的手段和方法
  • 網(wǎng)站后臺管理怎么做/德陽seo
  • 安卓軟件開發(fā)app/優(yōu)化關(guān)鍵詞的方法包括
  • 指紋鎖在什么網(wǎng)站做宣傳好/注冊網(wǎng)址
  • 如何查看網(wǎng)站空間大小/個人發(fā)布信息免費推廣平臺
  • 加強政府網(wǎng)站建設(shè)的總結(jié)/西安seo代運營
  • 有做瀏覽單的網(wǎng)站/百度小說風云榜2022
  • 如何建設(shè)英文網(wǎng)站/淘寶店鋪買賣交易平臺
  • 開一個網(wǎng)站建設(shè)公司/it培訓(xùn)四個月騙局
  • 廊坊市做網(wǎng)站/贛州seo排名
  • 手機商城網(wǎng)站開發(fā)/seo流量的提升的軟件
  • 做澳洲外貿(mào)的網(wǎng)站有哪些/港港網(wǎng)app下載最新版
  • 不懂代碼用cms做網(wǎng)站/h5制作
  • 好的做網(wǎng)站公司/營銷網(wǎng)站做的好的公司