반응형
completablefuture 조인 대 get
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());
}
두 가지 방법으로 시도했지만 결과에는 차이가 없습니다.
감사
유일한 차이점은 메서드가 예외를 throw하는 방법입니다. 인터페이스에서 다음과 같이 get()
선언 Future
됩니다.
V get() throws InterruptedException, ExecutionException;
예외는 모두 확인 된 예외이므로 코드에서 처리해야합니다. 코드에서 볼 수 있듯이 IDE의 자동 코드 생성기가 대신 try-catch 블록을 만들지 묻습니다.
try {
CompletableFuture.allOf(fanoutRequestList).get()
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
이 join()
메서드는 확인 된 예외를 throw하지 않습니다 .
public T join()
Instead it throws unchecked CompletionException. So you do not need a try-catch block and instead you can fully harness exceptionally()
method when using the disscused List<String> process
function
CompletableFuture<List<String>> cf = CompletableFuture
.supplyAsync(this::process)
.exceptionally(this::getFallbackListOfStrings) // Here you can catch e.g. {@code join}'s CompletionException
.thenAccept(this::processFurther);
You can find both get()
and join()
implementation here
ReferenceURL : https://stackoverflow.com/questions/45490316/completablefuture-join-vs-get
반응형
'Program Tip' 카테고리의 다른 글
OpenCL과 OpenGL의 컴퓨 트 셰이더의 차이점은 무엇입니까? (0) | 2021.01.08 |
---|---|
웹 서버에 라 라벨 프로젝트 업로드 (0) | 2021.01.08 |
API 끝점 의미 체계 (0) | 2021.01.08 |
"melt"와 반대로 데이터 프레임을 테이블로 재정렬 (0) | 2021.01.08 |
popstate 이벤트가 HTML5 pushstate를 사용하여 뒤로 또는 앞으로 작업에서 오는 경우 어떻게 검색합니까? (0) | 2021.01.08 |