구조적 동시성
동시 작업의 생명주기를 하나의 작업 단위로 관리합니다.
코드 비교
✕ Java 8
ExecutorService exec =
Executors.newFixedThreadPool(2);
Future<User> u = exec.submit(this::fetchUser);
Future<Order> o = exec.submit(this::fetchOrder);
try {
return combine(u.get(), o.get());
} finally { exec.shutdown(); }
✓ Java 25 (Preview)
try (var scope = new StructuredTaskScope
.ShutdownOnFailure()) {
var u = scope.fork(this::fetchUser);
var o = scope.fork(this::fetchOrder);
scope.join().throwIfFailed();
return combine(u.get(), o.get());
}
이 코드에 문제가 있나요? 알려주세요.
모던 방식이 더 나은 이유
스레드 누수 없음
포크된 모든 작업이 스코프가 닫히기 전에 완료됩니다.
빠른 실패
ShutdownOnFailure는 하나가 실패하면 형제 작업을 취소합니다.
명확한 구조
작업 생명주기가 코드의 어휘적 스코프와 일치합니다.
이전 방식
수동 스레드 생명주기
모던 방식
StructuredTaskScope
JDK 버전
25
난이도
고급
JDK 지원
구조적 동시성
프리뷰
JDK 25에서 프리뷰 (다섯 번째 프리뷰, JEP 505). --enable-preview가 필요합니다.
동작 원리
구조적 동시성은 동시 작업 그룹을 하나의 작업으로 처리합니다. 하위 작업이 실패하면 나머지가 취소됩니다. 스코프는 스레드 누수가 없고 명확한 부모-자식 관계를 제공합니다.
관련 문서