CompletableFuture.get()
과 의 차이점은 무엇입니까 CompletableFuture.join()
?
아래는 내 코드입니다.
List<String> process() {
List<String> messages = Arrays.asList("Msg1", "Msg2", "Msg3", "Msg4", "Msg5", "Msg6", "Msg7", "Msg8", "Msg9",
"Msg10", "Msg11", "Msg12");
MessageService messageService = new MessageService();
ExecutorService executor = Executors.newFixedThreadPool(4);
List<String> mapResult = new ArrayList<>();
CompletableFuture<?>[] fanoutRequestList = new CompletableFuture[messages.size()];
int count = 0;
for (String msg : messages) {
CompletableFuture<?> future = CompletableFuture
.supplyAsync(() -> messageService.sendNotification(msg), executor).exceptionally(ex -> "Error")
.thenAccept(mapResult::add);
fanoutRequestList[count++] = future;
}
try {
CompletableFuture.allOf(fanoutRequestList).get();
//CompletableFuture.allOf(fanoutRequestList).join();
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mapResult.stream().filter(s -> !s.equalsIgnoreCase("Error")).collect(Collectors.toList());
}
두 가지 방법을 모두 시도했지만 결과에는 차이가 없습니다.
get()
확인 된 예외를 포착해야합니다. 당신이에서 변경할 때 그 차이를주의해야get()
하는join()
당신이 imediately 둘을 알리는 컴파일러 오류 얻을 것이다로서,InterruptedException
도하는 것은ExecutionException
에서 발생하지 않습니다try
블록을.