import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class EcommerceSystem {
// 模拟查询商品库存的异步操作
public static CompletableFuture<Integer> queryStock() {
return CompletableFuture.supplyAsync(() -> {
// 这里模拟实际查询库存的逻辑
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
return 15;
});
}
// 模拟查询商品价格的异步操作
public static CompletableFuture<Double> queryPrice() {
return CompletableFuture.supplyAsync(() -> {
// 这里模拟实际查询价格的逻辑
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
return 80.0;
});
}
// 模拟查询商品促销信息的异步操作
public static CompletableFuture<String> queryPromotion() {
return CompletableFuture.supplyAsync(() -> {
// 这里模拟实际查询促销信息的逻辑
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
return "满50减10";
});
}
public static void main(String[] args) {
CompletableFuture<Integer> stockFuture = queryStock();
CompletableFuture<Double> priceFuture = queryPrice();
CompletableFuture<String> promotionFuture = queryPromotion();
CompletableFuture<Void> allFutures = CompletableFuture.allOf(stockFuture, priceFuture, promotionFuture);
allFutures.join(); // 等待所有异步操作完成
try {
Integer stock = stockFuture.get();
Double price = priceFuture.get();
String promotion = promotionFuture.get();
if (stock > 10 && price < 100 && promotion != null &&!promotion.isEmpty()) {
System.out.println("可以进行促销活动");
} else {
System.out.println("不可以进行促销活动");
}
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
- 异步操作方法:
queryStock
:模拟查询商品库存,使用CompletableFuture.supplyAsync
异步执行,返回库存数量。
queryPrice
:模拟查询商品价格,同样使用CompletableFuture.supplyAsync
异步执行,返回价格。
queryPromotion
:模拟查询商品促销信息,使用CompletableFuture.supplyAsync
异步执行,返回促销信息。
- 主线程逻辑:
- 创建三个异步操作的
CompletableFuture
实例stockFuture
、priceFuture
、promotionFuture
。
- 使用
CompletableFuture.allOf
方法等待所有异步操作完成。
- 通过
join
方法阻塞当前线程,直到所有异步操作完成。
- 使用
get
方法获取每个异步操作的结果,并根据设定的条件判断是否可以进行促销活动,同时处理可能出现的InterruptedException
和ExecutionException
异常。