Java组合异步编程(2)

Java组合异步编程(2)

您好,我是湘王,这是我的云海天,欢迎您来,欢迎您再来~

 

多数码农在开发的时候,要么处理同步应用,要么处理异步。但是如果能学会使用CompletableFuture,就会具备一种神奇的能力:将同步变为异步(有点像用了月光宝盒后同时穿梭在好几个时空的感觉)。怎么做呢?来看看代码。

新增一个商店类Shop:

/**
 * 商店类
 * 
 * @author 湘王
 */
public class Shop {
    private String name = "";

    public Shop(String name) {
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }

    private double calculatePrice(String product) {
        delay();
        return 10 * product.charAt(0);
    }

    private void delay() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    // 同步得到价格
    public double getPrice(String word) {
        return calculatePrice(word);
    }

    // 增加异步查询:将同步方法转化为异步方法
    public Future<Double> getPriceAsync(String product) {
        CompletableFuture<Double> future = new CompletableFuture<>();
        new Thread(() -> {
            double price = calculatePrice(product);
            // 需要长时间计算的任务结束并返回结果时,设置Future返回值
            future.complete(price);
        }).start();

        // 无需等待还没结束的计算,直接返回future对象
        return future;
    }
}
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Java组合异步编程(2)