
😎 쓰레드 풀을 이용해서 자원을 효율적으로 관리해서 비동기 작업을 실행 및 관리를 도와주는 서비스
한 번에 하나의 작업만 실행하도록 단일 쓰레드로 구성
쓰레드 개수를 지정해주고 그 만큼의 쓰레드만 생성
사용가능한 쓰레드가 없으면 새로 생성하고, 일정시간 사용하지 않으면 삭제
스케줄링 기능을 갖춘 고정 크기의 쓰레드풀을 생성.
work steal알고리즘을 사용하는 ForkJoinPool생성
❓ 비동기적 연산의 처리 결과를 표현하기 위해 사용된다. 비동기 처리가 완료되었는지 확인하고, 처리 완료를 기다리고, 처리 결과를 반환하는 메서드를 제공한다.
Future를 이용하면 멀티 스레드 환경에서 처리된 어떤 데이터를 다른 스레드에 전달할 수 있으며, Future는 내부적으로 Thread-Safe 하게 구현되어 있기 때문에 synchronized block(동기화 블록)을 사용하지 않아도 된다.
Future 객체는 작업이 완료될 때까지 기다렸다가 최종 결과를 얻는 데 사용하며, 때문에 지연 완료(pending completion) 객체라고도 한다.

Future를 외부에서 완료시킬 수 있어서 CompletableFuture라는 이름을 갖고 있다.
예를 들어, Future에서는 불가능했던 "몇 초 이내에 응답이 안 오면 기본값을 반환한다." 와 같은 작업이 가능해진 것이다.
즉, Future의 진화된 형태로써 외부에서 작업을 완료시킬 수 있을 뿐만 아니라 콜백 등록 및 Future 조합 등이 가능하다는 것이다.
public static CompletableFuture<Void> runAsync(Runnable runnable) {}
public static<U> CompletableFuture<U> supplyAsync(Supplier<U> supplier) {}
CompletableFuture<Integer> future = new CompletabeFuture();
future.complete(1);
future.isCompletedExceptionally();
Future에서는 isDone과 isCanceled만 존재했기때문에 예외로인해 종료된 것을 알 수없었다.
여러 completableFuture를 모아서 하나의 completableFuture로 변환할 수있다.
모든 completableFuture가 완료되어야 done
Void를 반환
여러 completableFuture를 모아서 하나의 completableFuture로 변환할 수있다.
하나의 completableFuture만 완료되면 done상태로 변경 후 완료된 future값 반환
💘 다음에는 실사용 코드를 정리해볼 예정이다.