피드로 돌아가기
InfoQBackend
원문 읽기
JDK 27 Structured Concurrency의 예외 처리 모델 정교화 및 타입 안전성 확보
JEP 533 Tightens Exception Handling in Java's Structured Concurrency for JDK 27
AI 요약
Context
기존 ad-hoc 스레드 관리의 서브태스크 생명주기 제어 불가 및 취소 전파의 불확실성 해결 필요성 대두. 초기 Preview 버전의 FailedException 사용으로 인한 전통적인 Java 동시성 모델과의 개념적 괴리 존재.
Technical Solution
- FailedException을 ExecutionException으로 변경하여 Future.get()과 동일한 예외 처리 패턴(catch-then-switch) 적용
- Joiner 인터페이스에 세 번째 타입 파라미터 R_X를 도입하여 join() 메서드의 throw 예외 타입을 명시적으로 정의
- 라이브러리 설계 시 throw 구문을 타입 시스템의 일부로 통합하여 호출자에게 정밀한 Checked-Exception 계약 제공
- UnaryOperator 기반의 open() 오버로드를 추가하여 기본 join 정책과 설정 구성을 결합한 간결한 팩토리 구조 구현
- ScopedValue 바인딩 상속 및 JSON 스레드 덤프 기반의 계층 구조 가시성을 유지하며 API 수렴 가속화
실천 포인트
- JDK 27 마이그레이션 시 기존 FailedException 캐치 블록을 ExecutionException으로 업데이트 - 커스텀 Joiner 구현 시 R_X 타입 파라미터를 활용해 예외 명세의 정밀도 향상 - 복잡한 설정이 필요한 StructuredTaskScope 생성 시 새로운 open(UnaryOperator) 메서드로 보일러플레이트 코드 제거