홈 › 고급 › 09 / 10

CompletableFuture 심화와 가상 스레드 실전

어느 스레드에서, 어떤 풀로, 실패하면 어떻게
섹션 7진행 0 / 10

7. 정리

  • thenApply 는 이전 단계를 끝낸 스레드에서, 이미 완료됐으면 호출자 스레드에서 실행됩니다. 위치를 정하려면 Async + executor 를 씁니다.
  • 블로킹 I/O 는 commonPool 에 넣지 않습니다. 가상 스레드 executor 가 기본 선택입니다.
  • 예외는 단계를 건너뛰며 전파되고, join 은 CompletionException 으로 감쌉니다. 복구는 체인 끝의 exceptionally, 관찰은 whenComplete 입니다.
  • orTimeout 은 기다림만 끊습니다. 작업 취소는 클라이언트·드라이버 타임아웃으로 합니다.
  • 재시도는 handle + delayedExecutor + thenCompose 로 스레드를 붙잡지 않고 씁니다.
  • JDK 21 가상 스레드는 synchronized 안 블로킹에서 피닝됩니다. tracePinnedThreads 로 찾고 ReentrantLock 으로 바꿉니다.
  • 가상 스레드는 스레드 병목을 없앨 뿐 자원 병목은 그대로입니다. Semaphore 로 자원 수만큼 제한합니다.