[DEV] J-Jay

Future 본문

Back-end/MSA

Future

J-Jay 2024. 3. 4. 21:14
728x90

Future

1. 비동기적인 작업을 수행한다.

2. 해당 작업이 완료되면 결과를 반환하는 인터페이스다.
public interface Future<V> {
    boolean cancle(boolean mayInterruptIfRunning);
    boolean isCancelled();
    boolean isDone();
    V get() throws InterruptedException, ExcutionException;
    V get(long timeout, TimeUnit unit) throws InterruptedException, ExcutionException, TimeoutException;
}

 

 

isDone()

Future의 상태를 반환한다.
Task가 완료되었다면, 원인과 상관없이 True를 반환한다.

 

isCancelled()

Future의 상태를 반환한다.
Task가 명시적으로 취소된 경우, True를 반환한다.

 

get()

결과를 구할때까지 Thread가 Block된 상태
Future에서 무한루프나 오랜 시간이 걸린다면 Thread가 Blocking 상태를 유지한다.

 

get(long timeout, TimeUnit unit)

결과를 구할때까지 timeout 시간 동안에만 Thread가 Block 된 상태
timeout이 넘어갈떄까지 응답이 반환되지 않으면 TimeoutException이 발생한다.
get()보다 좀더 안전한 방법이다.

 

cancel(boolean mayInterruptIfRunning)

Future의 작업 실행을 취소한다.
취소 할 수 없는 상황이라면 False를 반환한다.
mayInterruptIfRunning를 False로 제공하면 시작히자 않은 작업에 대해서만 취소한다.

 

Future 인터페이스의 단점

cancel 메소드를 을 제외하고 외부에서 Future를 컨트롤 할 수 없다.
반환된 결과를 get() 해서 접근하기 때문에 비동기 처리가 어렵다.
완료 or 에러가 발생했는지 구분하기가 어렵다. (완료든 에러든 future.isDone()은 True이다.)

'Back-end > MSA' 카테고리의 다른 글

MSA 분해로 인해 생긴 문제 해결 방법  (0) 2024.04.25
MSA 분해로 생긴 문제들  (1) 2024.04.25
ExecutorService  (0) 2024.03.04
Blocking vs Non-Blocking  (1) 2024.02.26
동기와 비동기  (0) 2023.05.14