Java의 가상 스레드
8342 단어 concurrencykotlinprogrammingjava
가상 스레드는 약속한 대로 동시성을 사용하기 쉽게 만듭니다.
변경 사항은 최소이며 클래식 ThreadPool 대신 newVirtualThreadPerTaskExecutor를 사용할 수 있습니다. 그게 다야!
이제 Java 19 덕분에 경량 동시성 모델(Kotlin의 코루틴과 유사)을 사용하여 처리량이 많은 애플리케이션을 만들 수 있습니다. 이것은 가상 스레드를 통해 수행됩니다.
Spring Boot는 이미 Java 19를 지원하지만 아직 미리 보기 모드이므로 인내심을 가져야 합니다.
데모 자바
https://github.com/jorgetovar/java-loom-project
차단 작업
public Integer call() throws InterruptedException {
Thread.sleep(1000);
return number;
}
1_000 차단 작업 처리
public void process(String threadPoolType) throws InterruptedException, ExecutionException {
try (ExecutorService executor = executorService) {
List<Task> tasks = IntStream.range(0, 1_000)
.mapToObj(Task::new)
.collect(Collectors.toList());
long time = System.currentTimeMillis();
List<Future<Integer>> futures = executor.invokeAll(tasks);
long sum = 0;
for (Future<Integer> future : futures) {
sum += future.get();
}
time = System.currentTimeMillis() - time;
log.info("Result = {} ThreadPool sum: {} in {} ms", threadPoolType, sum, time);
executor.shutdown();
}
}
Loom 및 Classic ThreadPool 태스크로 처리*
@Override
public void run(String... args) throws Exception {
ExecutorService loom = Executors.newVirtualThreadPerTaskExecutor();
ExecutorService classic = Executors.newFixedThreadPool(100);
VirtualThreads virtualThreads = new VirtualThreads(classic);
virtualThreads.process("classic");
virtualThreads = new VirtualThreads(loom);
virtualThreads.process("loom");
}
산출
- : Started DemoApplication in 0.373 seconds (JVM running for 0.66)
- : Result = classic ThreadPool sum: 499500 in 10062 ms
- : Result = loom ThreadPool sum: 499500 in 1015 ms
데모 코틀린
코루틴
measureTimeMillis {
runBlocking {
repeat(1_000) { i ->
launch {
call(i)
}
}
}
}.also {
print("Result = Coroutines finished in $it ms")
}
산출
Result = Coroutines finished in 1064 ms
결론
Project Loom은 Java의 게임 체인저입니다. 이를 통해 개발자는 패러다임을 바꾸거나 현재 코드를 크게 변경하지 않고도 높은 동시 응용 프로그램을 만들 수 있습니다.
Reference
이 문제에 관하여(Java의 가상 스레드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jorgetovar/virtual-threads-in-java-23mf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)