JUC并發(fā)編程學(xué)習(xí)筆記(十四)異步回調(diào)
異步回調(diào)
Future設(shè)計(jì)的初衷:對(duì)將來(lái)的某個(gè)事件的結(jié)果進(jìn)行建模
在Future類的子類中可以找到CompletableFuture,在介紹中可以看到這是為非異步的請(qǐng)求使用一些異步的方法來(lái)處理


點(diǎn)進(jìn)具體實(shí)現(xiàn)類中,查看方法,可以看到CompletableFuture中的異步內(nèi)部類,里面是實(shí)現(xiàn)的異步方法

以及一些異步方法

通過(guò)CompletableFuture可以實(shí)現(xiàn)與Ajax一樣的異步調(diào)用。
package org.example.asyn;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
/*
* 異步調(diào)用:CompletableFuture
* //異步執(zhí)行
* //成功回調(diào)
* //失敗回調(diào)
* */
public class Demo01 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
CompletableHasReturn() ;
}
public static void CompletableNotReturn() throws ExecutionException, InterruptedException {
//沒(méi)有返回值的異步回調(diào)
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("執(zhí)行異步請(qǐng)求完畢");
});
for (int i = 0; i < 5; i++) {
TimeUnit.SECONDS.sleep(1);
System.out.println(i);
}
//獲取回調(diào)結(jié)果
future.get();
}
public static void CompletableHasReturn() throws ExecutionException, InterruptedException {
//有返回值的異步回調(diào)
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
int i = 10/0;
return 1024;
});
System.out.println(future.whenComplete((t, u) -> {//編譯
System.out.println("t:" + t);//t是正常的返回結(jié)果
System.out.println("u:" + u);//u是報(bào)錯(cuò)信息
}).exceptionally((e) -> {//編譯異常 /Exception e
e.printStackTrace();
return 123;//異常返回結(jié)果
}).get());//獲取回調(diào)結(jié)果
}
}

浙公網(wǎng)安備 33010602011771號(hào)