了解一下jdk1.8的关于CompletableFuture的异步执行

1.8以前我们使用 future来实现 异步执行:

public static void main(String[] args) throws InterruptedException, ExecutionException {
	        ExecutorService executorService = Executors.newCachedThreadPool();
	        Future<String> future = executorService.submit(() -> {
	            try {
	                Thread.sleep(1000);
	            } catch (InterruptedException e) {
	                e.printStackTrace();
	            }
	            return "callable finished";
	        });
	        //do something else
	        Thread.sleep(2000);
	        String callableResult = future.get();
	        System.out.println(callableResult);
	        executorService.shutdown();//线程池使用完 一定要关闭;
}

我们通过isDone()来判断是否执行完成或者通过 get()来获取执行结果;

1.8 以后我们使用CompletableFuture 来实现异步执行

List<CompletableFuture<Void>> futures = new ArrayList<>();
CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> testMethod(参数1,参数2))
          .thenAccept(v -> acceptMtethod(v)).exceptionally(e->{
              throw new BusinessException("testMethod()执行失败异常!",e);
});
//supplyAsync 有返回值
//thenAccept 表示 对testMethod()的返回值进行接受,通过acceptMtethod(v)来进行处理,无返回值!

CompletableFuture<Void> future1 = CompletableFuture.runAsync(()->testMethod(参数1,参数2)).exceptionally(e->{
            throw new BusinessException("testMethod()执行失败异常!",e);
});
//runAsync 无返回值
futures.add(future);
futures.add(future1);
try {
     CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).get(10, TimeUnit.SECONDS);
 }catch (Exception e){
     throw new SystemException(e);
 }

当然还有很多方法 没讲到比如:
thenCombine 合并任务 等所有任务执行完成后 合并结果
。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我为offer而来

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值