技术版本
jdk: 1.8
网上帖子千千万,咱也一起炒冷饭.
闲言少叙 书接上文
案例开始
accept和apply系列方法补充
-
acceptEither方法, 先执行完的任务被返回, 然后Consumer的入参就是先返回的任务的数据,但是2个任务都执行了
@Test
public void thenAcceptEitherTest() {
CompletableFuture.supplyAsync(() -> ProductService.Instance.getProduct(12))
.acceptEither(CompletableFuture.supplyAsync(() -> ProductService.Instance.getProduct(15)),
p -> MixAll.printWithThread(" product:" + p.getName() + " returned..."));
//等待执行完成
MixAll.simulateComputeCost(5);
}
该方法同时包括2个带Async后缀的重载方法
2.applyToEither方法,
合并2个CompletableFuture
1.假如要先获取产生信息,拿到数据后在获取对应的商户信息,这种是存在依赖关系的情况
@Test
public void combineFutureTest() {
CompletableFuture<Merchant> cf = CompletableFuture
.supplyAsync(() -> ProductService.Instance.getProduct(12)) //step1
.thenCompose(product -> CompletableFuture.supplyAsync(() -> MerchantService.Instance.getMerchant(product))); //step2
}
在step1处返回的是CompletableFuture, thenCompose的入参是个Function<? super T, ? extends CompletionStage> fn, 注意返回值是CompletionStage的子类,
所以在step2处转成了CompletableFuture
2.有2个互相独立的计算, 等他们都完成后在合并做一些计算的情况
@Test
public void combineFutureTest2() throws ExecutionException, InterruptedException {
C