https://tech.kakaopay.com/post/ro-spring-virtual-thread/

https://d2.naver.com/helloworld/1203723

https://techblog.lycorp.co.jp/ko/about-java-virtual-thread-1

https://dzone.com/articles/the-long-road-to-java-virtual-threads

https://notypie.dev/java-virtual-thread-와-platform-thread/

⚠️ 문제점!

JDK21에 새로도입되었다.

<aside> 💡

이하는 dev.java의 글을 선택적으로 요약한 글입니다.

https://dev.java/learn/new-features/virtual-threads/

</aside>

가상 쓰레드는 왜 필요한가?

1995년 java 1.0이 출시되었을때, API에있던 100개의 클래스 중 java.lang.Thread.java 도 있었다.

Java 1.2 이후 부터 각 Java의 쓰레드는 OS에서 제공하는 플랫폼 스레드에서 실행된다.

💡여기서 플랫폼 스레드(Platform Thread)는 기존에 자바가 제공하던 일반적인 Java쓰레드를 말한다. Thread 객체나 Executor 기반 쓰레드들.

이 쓰레드들은 OS커널 수준의 스레드에 직접 매핑된다.

따라서 컨텍스트 스위칭 비용이 높음.

플랫폼 스레드는 비용을 많이 잡아먹음. WAS가 처리하는 수많은 동시 요청을 전부 각각의 플랫폼 스레드에서 처리하는건 거의 불가능하다.

이런 상황에서 처리량을 높이는 고전적인 방법은 논블로킹방식을 사용하는 것. 이는 콜백 지옥을 만들기도 함.

JEP 425, Java 19에서 가상스레드를 도입하기 시작했다. 그리고 Java21에서 최종 승인됨.