CompletableFuture异步回调与线程池结合


    public static void main(String[] args) throws Exception {
        test();
        System.out.println("结束..............................");
        Thread.sleep(30000);

    }

    public static void test () {
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 5, 30,
                TimeUnit.SECONDS, new LinkedBlockingDeque<>(20), Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());
        CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
            System.out.println("正在处理");
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("处理结束");
            return 42;
        },threadPoolExecutor);

        System.out.println("开始");
        // 定义回调函数
        future.thenAccept(result -> {
            System.out.println("异步回调!");
            // 回调处理结果
            System.out.println("结果:" + result);
        });
    }

`CompletableFuture` 提供了几种用于处理异步操作完成后的回调方法: ### 1. `thenAccept` 当异步操作完成后,此方法会被调用,它接收一个参数并执行相应操作。 ```java CompletableFuture.supplyAsync(() -> "Hello").thenAccept(result -> System.out.println(result)); ``` ### 2. `thenApply` 类似于 `thenAccept`,但它还接受一个转换函数作为参数,用于在回调时转换结果。 ```java CompletableFuture.supplyAsync(() -> "Hello").thenApply(str -> str.toUpperCase()).thenAccept(System.out::println); ``` ### 3. `thenCombine` 此方法允许您将两个 `CompletableFuture` 结果合并成一个新的 `CompletableFuture` 并执行回调。 ```java CompletableFuture<String> future1 = CompletableFuture.completedFuture("A"); CompletableFuture<String> future2 = CompletableFuture.completedFuture("B"); future1.thenCombine(future2, (a, b) -> a + b).thenAccept(System.out::println); // 输出 "AB" ``` ### 4. `thenRun` 与 `thenAccept` 类似,但不返回结果,主要用于执行某些操作。 ```java CompletableFuture.runAsync(() -> { System.out.println("Doing something..."); }); ``` ### 5. `whenComplete` 当异步操作完成时,此方法会被调用,并可以接收一个处理异常的方法以及另一个可选的操作方法。 ```java CompletableFuture.supplyAsync(() -> { throw new RuntimeException("Oops!"); }).whenComplete((result, ex) -> { if (ex != null) { System.err.println(ex.getMessage()); } }); ``` 这些回调方法可以帮助您更好地组织和管理异步操作的结果和错误处理流程。每个方法都有特定的应用场景,选择合适的回调可以根据您的具体需求优化代码结构和逻辑。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值