1.异步执行无返回值
CompletableFuture noArgsFuture = CompletableFuture.runAsync(new Runnable() {
@Override
public void run() {
System.out.println("***************");
}
});
2.异步执行有返回值
CompletableFuture<String> returnString = CompletableFuture.supplyAsync(new Supplier<String>() {
@Override
public String get() {
return "abc";
}
});
String result = returnString.get();
System.out.println(result);
3.多个异步执行,等待所有结果返回才算完成
CompletableFuture<String> feature1 = CompletableFuture.supplyAsync(new Supplier<String>() {
@Override
public String get() {
try {
Thread.sleep(3000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "abc";
}
});
CompletableFuture<String> feature2 = CompletableFuture.supplyAsync(new Supplier<String>() {
@Override
public String get() {
return "def";
}
});
CompletableFuture<String> feature3 = CompletableFuture.supplyAsync(new Supplier<String>() {
@Override
public String get() {
return "ghi";
}
});
CompletableFuture totalFeature = CompletableFuture.allOf(feature1, feature2, feature3);
totalFeature.join();
String str3=feature3.get();
String str2=feature2.get();
String str1=feature1.get();
List<String> stringList = Stream.of(feature1, feature2, feature3).map(CompletableFuture::join).collect(Collectors.toList());
System.out.println(stringList);
System.out.println(str1+str2+str3);
4.多个异步执行,有参数有返回值
List<Date> dates = new ArrayList<>();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
dates.add(sdf.parse("2020-02-22 12:12:01"));
dates.add(sdf.parse("2020-02-23 12:12:01"));
dates.add(sdf.parse("2020-02-24 12:12:01"));
} catch (ParseException e) {
e.printStackTrace();
}
List<CompletableFuture<String>> futures = new ArrayList<>();
for (Date date : dates) {
CompletableFuture<String> newFeature = CompletableFuture.supplyAsync(new Supplier<String>() {
@Override
public String get() {
return coverLongToString(date);
}
});
futures.add(newFeature);
}
CompletableFuture.allOf(futures.iterator().next());
List<String> dateStringList = futures.stream().map(CompletableFuture::join).collect(Collectors.toList());
System.out.println(dateStringList);