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
- JEP 425: Virtual Threads (Preview) (JDK 19)
- JEP 436: Virtual Threads (Second Preview) (JDK 20)
- JEP 444: Virtual Threads (JDK 21, LTS)
- 쓰레드 상속해서 기존 스레드 코드를 많이 수정할 필요가 없음.
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 |