thread pool 장단점

장점

task submit과 thread 실행을 분리해서 작업할 수 있습니다.

단점

blocking 되는 작업으로 인해서 성능저하가 심하게 일어날 수 있습니다.

Completable Future란?

: 비동기적으로 일을 수행하기 위해 자바에서 제공되는 자바 9 api 입니다. 기존의 future와 다른 점은 future 인터페이스를 상속하고 있기 때문에 기존 기능은 가지고 있지만 다른 독립적 작업에 대해서 연관관계를 유연하게 코드로 표현할 수 있게 해줌으로써 이점을 가질 수 있습니다.

각종 메서드들이 있는데 솔직히 너무 많습니다. 저는 그중에서도 모던 자바인 액션에서 주로 사용했던 메소드를 중심으로 설명하겠습니다.

Executors.newFixedThreadPool(5); //스레드풀을 생성하는 코드
CompletableFuture.supplyAsync(() -> { ... }, executor)//비동기 스레드를 생성하는 메소드
				.completeOnTimeout(null, 2, TimeUnit.SECONDS)//비동기 스레드에 시간제한을 거는 메소드
        .thenAccept(System.out::println); // 결과값이 나오면 consumer를 통해서 처리하는 메소드

a.thenCombine(b, Integer::sum);//각각의 결과 값을 결합하는 메소드
.
.
.

정말 많은 메소드들이 있지만 그중에 추린 것들입니다.

CompletableFuture에서는 기존의 비동기 api인 Future에 대해서 부족했던 기능인 비동기처리 및 시간제한 등 편의성을 추가하였고 스트림과 비슷하게 코드를 조립의 형태로 만들 수 있게 함으로써 가독성 및 블록 기능에 대한 문제를 해결하였습니다.

다음과 같은 함수가 있습니다.

int f(int x) {
    return x + 1;
}

int g(int x) {
    return x - 1;
}

원래 Future를 사용하면 이렇게 써야합니다.