工厂方法创建CompletableFuture(三)

CompletableFuture类自 身提供了大量精巧的工厂方法,使用这些方法能更容易地完成整个流程,还不用担心实现的细节。

    public Future<Double> getPriceAsync(String product) {
        //创建CompletableFuture 对象,它会包含计算的结果
        CompletableFuture<Double> futurePrice = new CompletableFuture<>();
        //在另一个线程中以异步方式执行计算
        new Thread(() -> {
            double price = calculatePrice(product);
            //需长时间计算的任务结 束并得出结果时,设置 Future的返回值
            futurePrice.complete(price);
        }).start();
        // 无需等待还没结束的计算,直接返回Future对象
        return futurePrice;
    }

采用supplyAsync方法后,你可以用一行语句重写上面的getPriceAsync方 法,如下所示。

public Future<Double> getPriceAsync(String product) {
    return CompletableFuture.supplyAsync(() -> calculatePrice(product));
}

upplyAsync方法接受一个生产者(Supplier)作为参数,返回一个CompletableFuture对象,该对象完成异步执行后会读取调用生产者方法的返回值。生产者方法会交由ForkJoinPool 池中的某个执行线程(Executor)运行,但是你也可以使用supplyAsync方法的重载版本,传 递第二个参数指定不同的执行线程执行生产者方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值