Skip to content

Java ‐ Virtual Thread

woo jin edited this page Feb 8, 2026 · 5 revisions

Virtual Thread Example Code

public static void main(String[] args) throws InterruptedException {
    ThreadFactory factory = Thread.ofVirtual().name("test-", 0).factory();
    try (ExecutorService executorService = Executors.newThreadPerTaskExecutor(factory)) {
        for (int i = 0; i < 100; i++) {
             executorService.submit(runnable);
        }
    }
}
  • newThreadPerTaskExecutor : 작업 1개 = 가상 스레드 1개, 풀 관리에 대한 고민이 없다.
  • try-with-resources : 자원 관리가 깔끔하다.
  • 가상 스레드 : 생성 비용 거의 없다, 블로킹 I/O에 매우 강하다.(DB, HTTP, sleep 등)

Virtual Thread 개념

가상 쓰레드에서 고정(pinning) 현상을 유발하며 성능 저하를 일으킬 수 있는 주된 원인 - synchronized 블록 안에서의 블로킹 작업

  • synchronized 블록이나 네이티브 메서드 안에서 쓰레드가 블로킹 상태가 되면 가상 쓰레드가 플랫폼 쓰레드에서 언마운트되지 못하고 고정되어 비효율적이 된다.
  • 이런 문제를 해결하려면 ReentrantLock으로 동기화 방식을 바꿔주면 블로킹 시 가상 쓰레드가 플랫폼 쓰레드에서 분리될 수 있어 고정 문제를 피하고 성능을 개선할 수 있다.

SpringBoot에서의 Virtual Thread

spring:
  threads:
    virtual:
      enabled: true

참고한 문서 정리

📖 Java

📖 Kotlin

📖 Coroutine

📖 Spring

📖 Spring Security

📖 Spring Batch

📖 Reactive Programming

📖 Database

📖 MySQL

📖 Redis

📖 JPA

📖 QueryDsl

📖 MSA

📖 Kafka

📖 Apache Flink

  • [Apache Flink - Apache Flink Architecture]
  • [Apache Flink - Stream Processing]
  • [Apache Flink - Data Stream API & Window]
  • [Apache Flink - State Management]

📖 HTTP

📖 AWS

📖 Docker

📖 Kubernetes

📖 CI/CD

📖 Nginx

📖 Monitoring🥈

  • [Monitoring - Log Concept]
  • [Monitoring - Log Level & Filter]
  • [Monitoring - Logback]
  • [Monitoring - Log Collection with ELK Stack]
  • [Monitoring - Log Monitoring with Kibana]
  • [Monitoring - Building a Monitoring System with Spring Boot Actuator]
  • [Monitoring - Server Monitoring with Prometheus and Grafana with Discord Alerts]

📖 Test

📖 Effective Java 3/E

📖 Kotlin Academy - Effective Kotlin

📖 Kotlin Academy - 핵심편

📖 스프링으로 시작하는 리액티브 프로그래밍

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 1

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 2

📖 Clean Code

📖 리팩토링 2판

📖 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식

📖 GraphQL

Clone this wiki locally