Hello, Freakin world!

[Java] Future 에 대해서 간단하게 정리 본문

프로그래밍 언어/Java

[Java] Future 에 대해서 간단하게 정리

johnna_endure 2020. 3. 16. 06:48

어디에 쓰는 물건인고?

 

ExecutorService에서 비동기 작업의 결과를 감싸는 기능을 하는 클래스다.

다시 말해, 다른 스레드에서의 작업 결과에 접근할 수 있는 참조를 제공하는 역할을 한다.

 

제공하는 메서드

- cancel(boolean mayInterruptIfRunning)

- get()

- get(long timeout, TimeUnit unit)

- isCancelled()

- isDone()

 

예제

public class Main {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService executorService = Executors.newCachedThreadPool();
        HeavyTask task = new HeavyTask();
        Future<Integer> future = executorService.submit(task::computation);

        System.out.println("딴짓하기");

        System.out.println(future.get());
    }

}
class HeavyTask {
    public int computation() {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        int sum = 0;
        for (int i = 0; i < 200; i++) {
            sum += i;
        }
        return sum;
    }
}

 

Future의 한계

 

비동기로 처리할 작업이 두 가지 이상이고 작업들 간에 의존성이 존재할 경우, Future 만으로 처리하기 어려워진다.

이럴 경우 CompletableFuture 를 이용해 해결할 수 있다.

 

 

참고 자료

https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/concurrent/Future.html

책 : 자바 8 in action - 한빛 미디어

Comments