티스토리 뷰
반응형
CompleCompletableFuture의 get(long timeout, TimeUnit unit) 메서드와 completeExceptionally() 메서드
Future의 실행 도중 Excpetion이 발생한다면 해당 스레드에만 영향을 미치게 된다.
즉, 예러가 발생하더라도 그 이후의 동작은 계속 진행이 되며 일의 순서가 꼬이게 된다.
클라이언트는 future.get 메서드가 반환될 때까지 영원히 기다릴수 있다.
아래의 예시와 같이 타임 아웃 값을 받는 get 메서드를 사용하면 블록 문제를 해결은 할수 있다.
try { //결과가 준비되어있지 않으면 최대 1초간 블록한다. Double result = futurePrice.get(1, TimeUnit.SECONDS); } catch (InterruptedException e) { e.printStackTrace(); //future 수행 중 예외 발생 } catch (ExecutionException e) { e.printStackTrace(); //현재 스레드에서 대기 중 인터럽트 발생 } catch (TimeoutException e) { e.printStackTrace(); //Future가 완료되기 전에 타임아웃 발생 }
하지만 타임아웃 시간이 지나 TimeoutException이 발생하게 될경우 해당 예외가 왜 발생했는지는 알 수 없다.
따라서 completeExceptionally 메서드를 이용하여 CompletableFuture 내부에서 발생한 예외를 클라이언트에 전달해야 한다.
public Future<Double> getPriceAsync(String product) { CompletableFuture<Double> futurePrice = new CompletableFuture<>(); new Thread(() -> { //다른 스레드에서 비동기적으로 계산 수행 try { double price = calculatePrice(product); futurePrice.complete(price); //future에 값 설정 } catch (Exception e) { futurePrice.completeExceptionally(e); //exception이 발생하면 발생한 에러를 포함시켜 future 종료 } }).start(); return futurePrice; //계산 결과 기다리지 않고 바로 future 반환 }
참고
http://www.hanbit.co.kr/store/books/look.php?p_code=B1999551123
예제
https://github.com/handr95/java_study/tree/master/java8_study
반응형
'[JAVA]' 카테고리의 다른 글
[java] Cannot resolve symbol 'Resource' 에러 (0) | 2022.09.19 |
---|---|
[java] mulityKeyMap get 사용시 주의점 (0) | 2020.11.17 |
[java] for문 조건문 내 함수 사용시 주의 사항. (0) | 2020.11.15 |
[java] servlet 등록 방법 (0) | 2020.11.04 |
[java] Anonymous Classes(익명 클래스) (0) | 2019.06.12 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- ThreadPool
- spring
- jdk12
- Mockito
- jdk13
- thread priority
- sgw
- Redis
- Jenkins
- aspectj
- 확인창
- hot-deploy
- IntelliJ
- java
- JPA
- spring-security
- Thread
- junit5
- 한글깨짐
- Visual Studio 2022
- gradle
- JetBrains Mono
- 카멜 표기법
- JUnit
- codepoint
- java11
- Executor
- JAVA8
- 파스칼 표기법
- chmod
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함