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() 메소드를 사용하는 것이 좋습니다.
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 |
댓글 영역