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; } }