package com.bilibili.juc;
import lombok.Getter;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
public class demo01 {
static List<NetMall> list = Arrays.asList(
new NetMall("jd"),
new NetMall("dangdang"),
new NetMall("taobao"),
new NetMall("pdd"),
new NetMall("tmall")
);
public static List<String> getPrices(List<NetMall> list,String productName){
return list.stream().map(netMall ->
CompletableFuture.supplyAsync(()-> String.format(productName + "in %s price is %.2f"
, netMall.getNetMallName(),
netMall.calcPrice(productName))))
.collect(Collectors.toList())
.stream()
.map(s->s.join()).collect(Collectors.toList());
}
public static List<String> getPrice(List<NetMall> list,String productName){
return list
.stream()
.map(netMall ->
String.format(productName + "in %s price is %.2f"
, netMall.getNetMallName(),
netMall.calcPrice(productName)))
.collect(Collectors.toList());
}
public static void main(String[] args) {
long tim=System.currentTimeMillis();
List<String> mysql = getPrice(list, "mysql");
for (String s : mysql) {
System.out.println(s);
}
long time=System.currentTimeMillis();
System.out.println(time - tim);
long tim11=System.currentTimeMillis();
List<String> mysql2 = getPrices(list, "mysql");
for (String s : mysql2) {
System.out.println(s);
}
long time22=System.currentTimeMillis();
System.out.println(time22 - tim11);
}
}
class NetMall{
@Getter
private String netMallName;
public NetMall(String netMallName) {
this.netMallName = netMallName;
}
public double calcPrice(String productName){
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return ThreadLocalRandom.current().nextDouble() * 2 + productName.charAt(0);//就获取一个随机数
}
}
CompletableFuture的应用案例
于 2022-07-11 21:12:33 首次发布