淘寶代購(gòu)網(wǎng)站怎么做網(wǎng)站推廣策劃書模板
Java 中的 CompletableFuture
提供了多種方法來(lái)支持任務(wù)鏈?zhǔn)秸{(diào)用。這些方法允許你將一組操作鏈接在一起,形成一個(gè)任務(wù)鏈,每一個(gè)任務(wù)只有在上一個(gè)任務(wù)成功完成后才會(huì)被執(zhí)行?,F(xiàn)在,我們來(lái)看一下一些常用的鏈接任務(wù)的方法:
- thenApply():這個(gè)方法可以接收一個(gè) Function 實(shí)例,用來(lái)處理上一個(gè)階段計(jì)算后的結(jié)果,生成一個(gè)新的 CompletableFuture:
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {return 100;
});
CompletableFuture<String> future2 = future.thenApply(i -> i * 2).thenApply(i -> i.toString());
- thenAccept():這個(gè)方法和 thenApply() 很類似,但是不同的是,它的入?yún)⑹且粋€(gè) Consumer,它沒有返回值:
CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> {return 100;
});
future.thenAccept(System.out::println);
- thenRun():這個(gè)方法既不需要上一階段的結(jié)果,也沒有返回值,它接收一個(gè) Runnable 參數(shù):
CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> {return 100;
});
future.thenRun(() -> System.out.println("Finished"));
- thenCompose():這個(gè)方法接收一個(gè) Function,它的入?yún)⑹巧弦浑A段的結(jié)果,返回值必須是一個(gè)新的 CompletableFuture,用于鏈接兩個(gè) CompletableFuture:
CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {return 100;
});
CompletableFuture<Integer> future2 = future.thenCompose(i -> CompletableFuture.supplyAsync(() -> i * 2));
以上方法都是異步的,也就是說(shuō),它們返回的 CompletableFuture 對(duì)象完成的時(shí)間不受代碼順序的約束。此外,所有這些方法都有一個(gè)"Async"的版本,比如 thenApplyAsync(),他們可以讓后續(xù)的階段異步的執(zhí)行,也就是在新的線程里,更進(jìn)一步提高程序的并發(fā)性能。
結(jié)合這些方法,我們可以創(chuàng)建出一連串的任務(wù),每個(gè)任務(wù)都是在上一個(gè)任務(wù)完成之后開始,這就是 CompletableFuture 任務(wù)鏈的實(shí)現(xiàn)方式。