본문 바로가기

JAVA

Java의 Future이란

반응형

Fruture - Blocking 방식의 작업 완료 통보

Future 객체는 작업이 완료될 때까지 기다렸다가 최종 결과를 얻는 데 사용된다. 이를 지연완료 (pending completion) 객체라고 한다.

 

ExecutorService service = Executors.newSingleThreadExecutor();
        
        Runnable task = new Runnable() {
            @Override
            public void run() {
                // blah
            }
        };
        
        Future future = service.submit(task);
        
        try {
            future.get();
        } catch (Exception e) {
            // handling
        }

 

future.get()

작업이 정상적으로 완료되면 Future의 get()메소드는 리턴한다. 물론 리턴 값을 가질 때까지 get() 메소드를 호출한 Thread는 기다린다.

 

ExcutorService 관련내용

더보기

ExcutorService를 이용해서 간단한 쓰레드풀을 사용하여 병렬 처리를 할 수 있다.

본문에서 사용한 newSingleThreadExcutor()은 쓰레드 1개은 ExcutorService를 리턴하는것으로 싱글 쓰레드에서 동작해야하는 작업을 처리할 때 사용한다.

그 외로 newFixedThreadPool(int), newCachedThreadPool(), newScheduledThreadPool() 이 있다.

 

Callable

결과값이 있는 경우에 사용하는 객체이다.

 

ExecutorService service = Executors.newSingleThreadExecutor();

        Callable<String> task = new Callable<String>() {
            @Override
            public String call() throws Exception {
                return "월요병";
            }
        };
        
        Future<String> future = service.submit(task);
        try {
            String futureResult = future.get();
            System.out.println("futureResult: "+futureResult);
        } catch (Exception e) {
            // Exception e
        }

Callable<T>와 Future<T> T를 동일한 타입으로 설정해야한다.

 

참고 사이트

반응형

'JAVA' 카테고리의 다른 글

[리팩토링] 분류코드를 클래스로 치환  (0) 2021.03.21
일급컬렉션  (0) 2020.07.06
Java의 배열  (0) 2020.05.18
Enum에 대해서  (0) 2020.05.17
Reference 와 Garbage Collection  (0) 2020.03.13