Skip to content

CompletableFuture实例

java
@RequestMapping("/getStudentInfoWithCompletableFuture")
public Object getStudentInfoWithCompletableFuture() {
    long start = System.currentTimeMillis();
    Map<String, Object> resultMap = new HashMap<>(10);

    try {
        CompletableFuture<Object> completableFutureStudentName = CompletableFuture.supplyAsync(() -> {
            try {
                return studentService.getStudentName();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        });

        CompletableFuture<Object> completableFutureSutdentAge = CompletableFuture.supplyAsync(() -> {
            try {
                return studentService.getSutdentAge();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        });

        CompletableFuture<Object> completableFutureFamilyInfo = CompletableFuture.supplyAsync(() -> {
            try {
                return studentService.getSutdentFamilyInfo();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return null;
        });

        CompletableFuture.allOf(completableFutureStudentName, completableFutureSutdentAge, completableFutureFamilyInfo).join();

        resultMap.put("studentName", completableFutureStudentName.get());
        resultMap.put("studentAge", completableFutureSutdentAge.get());
        resultMap.put("studentFamilyInfo", completableFutureFamilyInfo.get());

    } catch (Exception e) {
        resultMap.put("errMsg", e.getMessage());
    }

    resultMap.put("total cost", System.currentTimeMillis() - start);

    return resultMap;
}
//自带最后的同步等待,不需要 CountDownLatch。CompletableFuture 还有很多其他好用的方法。
最近更新