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