본문 바로가기
JAVA

Virtual Thread

by e-pd 2023. 11. 6.

Project Loom ≠ Virtual Thread

Project Loom

https://openjdk.org/projects/loom/

https://cr.openjdk.org/~rpressler/loom/loom/sol1_part2.html

  • The goal of this Project is to explore and incubate Java VM features and APIs built on top of them for the implementation of lightweight user-mode threads (fibers), delimited continuations (of some form), and related features, such as explicit tail-call.
  • Virtual Thread (Fiber)
  • Structured Concurrency
  • Scope 내에서 Thread 코드의 관리를 용이하게 하도록 나온 기술. 스레드 수명을 코드 블록에 포함. 구조적 프로그래밍이 순차적 실행의 제어 흐름을 잘 정의된 코드 블록으로 제한하는 방식과 유사하게 구조적 동시성은 동시 제어 흐름과 동일한 작업을 수행. 코드 단위에서 생성된 스레드는 해당 코드 단위를 종료할 때 모두 종료.
  • Scope Variable
    • scoped value는 버추얼 스레드가 사용되는 데이터를 공유하는 기능.

Java Release

Getting Start

Runnable task = () -> {
}
// 
Thread virtualThread = Thread.ofVirtual().unstarted(task); 
virtualThread.start();

// 혹은 ExecutorService

ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor(); 
executorService.execute(task);

 

Virtual Thread

 

블록킹 시 캐리어 스레드가 다른 virtual thread를 실행하게됨.

  • 처리가 가능하게 되면 virtual thread 를 이어서 실행하게됨, 동기로 코드를 작성하지만 내부 동작은 비동기처럼 하게됨.

버추얼 스레드 내에는 상태를 정의하고 있다. 

 

 

버추얼 스레드를 실행해보면서 내부의 상태 또한 바뀌는 것을 확인할 수 있었다.

'JAVA' 카테고리의 다른 글

자바 Hash Map 공부  (0) 2021.10.06
자바 ArrayList 공부  (0) 2021.10.05
람다식  (0) 2021.03.05
제너릭  (0) 2021.02.25
I/O  (0) 2021.02.15