免费查找企业信息的网站碉堡了seo博客
演示Completable接口完全可以代替Future接口:
CompletableFuture减少阻塞和轮询,可以传入回调对象,当异步任务完成或者发生异常时,自动
调用回调对象的回调方法。
package com.nanjing.gulimall.zhouyimo.test;import java.util.concurrent.*;/*** @author zhou*/
public class CompletableFutureUseDemo {public static void main(String[] args) throws ExecutionException, InterruptedException {ExecutorService executorService = Executors.newFixedThreadPool(3);CompletableFuture<Integer> completableFuture = CompletableFuture.supplyAsync(() -> {System.out.println(Thread.currentThread().getName() + "---come in");int result = ThreadLocalRandom.current().nextInt(10);try {TimeUnit.SECONDS.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}if (result > 5) { //模拟产生异常情况int i = 10 / 0;}System.out.println("----------1秒钟后出结果" + result);return result;}, executorService).whenComplete((v, e) -> {if (e == null) {System.out.println("计算完成,更新系统" + v);}}).exceptionally(e -> {e.printStackTrace();System.out.println("异常情况:" + e.getCause() + " " + e.getMessage());return null;});System.out.println(Thread.currentThread().getName() + "先去完成其他任务");executorService.shutdown();}
}
改下随机数测试正确的情况: