상세 컨텐츠

본문 제목

CompletableFuture get()과 join()의 차이점

Java

by Wanderer Kim 2023. 5. 2. 20:56

본문

728x90

Java의 CompletableFuture에서 get()과 join() 메소드는 모두 완료된 CompletableFuture의 결과를 반환하는 메소드입니다. 그러나 두 메소드에는 몇 가지 차이점이 있습니다.

 

get() 메소드는 CompletableFuture의 결과가 사용 가능할 때까지 기다리며 결과가 사용 가능해지면 그 결과를 반환합니다. 이 메소드는 CompletableFuture가 완료되기 전에 현재 스레드를 차단합니다. 만약 CompletableFuture가 예외를 던지면 원래 예외를 포장한 ExecutionException를 던집니다.

 

join() 메소드도 CompletableFuture의 결과가 사용 가능할 때까지 기다리며 결과가 사용 가능해지면 그 결과를 반환합니다. 그러나 join() 메소드는 체크된 예외를 던지지 않습니다. 대신 CompletableFuture가 예외를 던지면 join() 메소드는 원래 예외를 포장한 UncheckedExecutionException을 던집니다.

 

get()과 join() 메소드의 중요한 차이점 중 하나는 get() 메소드가 인터럽트 가능하다는 것이고, join() 메소드는 인터럽트가 불가능하다는 것입니다. 이것은 호출하는 스레드가 인터럽트될 때 get() 메소드가 InterruptedException을 던지는 반면, join() 메소드는 CompletableFuture가 완료될 때까지 차단됩니다.

 

또 다른 차이점은 get() 메소드는 java.util.concurrent.Future 인터페이스에 정의되어 있으므로 이 인터페이스를 구현하는 다른 클래스와 호환 가능하지만, join() 메소드는 CompletableFuture 클래스에만 특화되어 있기 때문에 CompletableFuture와만 사용할 수 있다는 것입니다.

 

일반적으로 CompletableFuture을 다룰 때는 join() 메소드를 사용하는 것이 좋습니다.

반응형

'Java' 카테고리의 다른 글

Concurrent Random Number  (0) 2024.09.24
[자바 성능 튜닝] 성능 테스트 접근법  (0) 2024.04.07
ThreadLocal  (1) 2024.02.28
JVM 메모리 관리  (0) 2023.05.29
Stream API 개요  (0) 2023.05.05

관련글 더보기

댓글 영역