JAVA · 비동기/동시성
Virtual Thread 심화
Java 21의 가상 스레드로 대규모 동시성을 저렴하게 구현합니다.
비동기/동시성고급VirtualThreadJava21경량스레드동시성
핵심 설명
Java 21의 가상 스레드로 대규모 동시성을 저렴하게 구현합니다.
Java code
import java.util.concurrent.*;
import java.time.*;
public class VirtualThreadAdvanced {
public static void main(String[] args) throws Exception {
// 가상 스레드 생성
Thread vt = Thread.ofVirtual()
.name("virtual-1")
.start(() -> System.out.println("가상 스레드!"));
vt.join();
// 가상 스레드 ExecutorService
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
// 100만 개 동시 작업도 가능!
int taskCount = 10_000;
var latch = new CountDownLatch(taskCount);
Instant start = Instant.now();
for (int i = 0; i < taskCount; i++) {
executor.submit(() -> {
try {
Thread.sleep(Duration.ofSeconds(1));
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
latch.countDown();
}
});
}
latch.await();
Duration elapsed = Duration.between(start, Instant.now());
System.out.printf("%d 태스크 완료: %dms%n",
taskCount, elapsed.toMillis());
// 플랫폼 스레드: 수십 초, 가상 스레드: ~1초
}
// isVirtual() 확인
System.out.println("메인 가상? " +
Thread.currentThread().isVirtual()); // false
}
}학습 팁
가상 스레드는 I/O 바운드 작업에 최적화됩니다. CPU 집약적 작업에는 플랫폼 스레드 풀이 더 적합합니다.
주의할 점
가상 스레드에서 synchronized 블록은 캐리어 스레드를 고정(pinning)합니다. ReentrantLock으로 대체하세요.
자주 묻는 질문
Virtual Thread 심화란 무엇인가요?
Java 21의 가상 스레드로 대규모 동시성을 저렴하게 구현합니다.
Virtual Thread 심화 학습 시 주의할 점은 무엇인가요?
가상 스레드에서 synchronized 블록은 캐리어 스레드를 고정(pinning)합니다. ReentrantLock 으로 대체하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.