@SneakyThrows
public static void main(String[] args) throws InterruptedException {
List<Student> studentList = getStudentList();
long start = System.currentTimeMillis();
// List<String> nameList = new ArrayList<>();
// for (Student student : studentList) {
// String name = getName(student);
// nameList.add(name);
// }
// long end = System.currentTimeMillis();
// System.out.println("同步获取名字: " + nameList + ",后进行业务处理....获取名字花费时间: " + (end -start) );
List<Student> studentList1 = getStudentList();
long start1 = System.currentTimeMillis();
CompletableFuture<List<String>> future = CompletableFuture.supplyAsync(() -> studentList1.stream()
.map(student -> CompletableFuture.supplyAsync(() -> {
try {
return getName(student);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}).exceptionally(throwable -> {
System.out.println("发生异常: " + throwable.getMessage());
return null;
})).collect(Collectors.toList())
.stream()
.map(CompletableFuture::join)
.collect(Collectors.toList()));
List<String> names = future.get();
long end1 = System.currentTimeMillis();
System.out.println("异步获取名字" + names + "后进行业务处理....获取名字花费时间: " + (end1 -start1) );
System.out.println("主线程处理任务被阻塞....");
}
private static String getName(Student student) throws InterruptedException {
TimeUnit.SECONDS.sleep(5);
int a = 10/0;
return student.getName();
}
private static List<Student> getStudentList() {
Student student1 = Student.builder().age(10).address("SZ").name("ZS").build();
Student student2 = Student.builder().age(20).address("bj").name("li").build();
Student student3 = Student.builder().age(30).address("sh").name("ww").build();
List<Student> studentList = Arrays.asList(student1, student2, student3);
return studentList;
}