Executors.newVirtualThreadPerTaskExecutor() (Java 21)를 사용해 하나의 작업을 하나의 가상 스레드에서 실행하는 방법, 이것이 고전적인 풀(
newFixedThreadPool,
newCachedThreadPool)과 어떻게 다른지,
shutdown()과
awaitTermination(...)으로 올바르게 종료하는 법,
Future로 작업 결과를 받는 법, 그리고 가상 스레드가 최대 효과를 내는 곳(대량 I/O, 웹 서버, 부하 테스트)을 다룹니다. 마지막에는 — 흔한 실수와 유의점을 정리합니다.