-
Java Virtual Thread (10), @async 어노테이션프로그래밍/Java 2024. 6. 29. 10:51
Controller.java
@GetMapping("/async") public void async() { log.info("1) async. thread: {}", Thread.currentThread()); virtualService.async(); log.info("2) async. thread: {}", Thread.currentThread()); }
Service.java
import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; @Service @Slf4j public class VirtualService { @Async("threadPoolTaskExecutor") public void async() { log.info("1) async. thread: {}", Thread.currentThread()); try { Thread.sleep(5000); } catch (InterruptedException e) { throw new RuntimeException(e); } log.info("2) async. thread: {}", Thread.currentThread()); } }
@Async 어노테이션에서 Virtual Thread가 잘 동작하는지 확인해보자.
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableAsync; @EnableAsync @SpringBootApplication public class VirtualthreadApplication { public static void main(String[] args) { SpringApplication.run(VirtualthreadApplication.class, args); } }
Spring에서 비동기로 제일 쉽게 하는 것이 @Async이다. 그리고 @Async 를 사용할 땐 @EnableAsync를 적어줘야 한다.
위 코드를 실행해보면, 컨트롤러에서는 Tomcat handler-0 이라는 스레드가 virtual thread가 사용되었다. 그리고 서비스에서는 task1 이라고하는 virtual thread가 사용된 것을 알 수 있다.
즉, 컨트롤러에서는 tomcat handler-0, @async가 선언된 서비스에서는 task 1이라고 하는 virtual thread가 사용된 것이다. 원래는 thread pool 에 있는 것을 자동으로 사용했다면, 이제는 virtual thread가 적용되는 것이다.
...
정리
1) spring 에서 사용하는 @async 에도 virtual thread 가 적용된다.
2) 컨트롤러에서는 tomcat handler-0 이라는 virtual thread 가 호출되며 @async가 선언된 구문에서는 task 1 이라는 virtual thread가 호출된다.
3) 만약 virtual thread를 적용하지 않았다면 자동으로 thread pool을 사용했을 것이다.
'프로그래밍 > Java' 카테고리의 다른 글
Java Virtual Thread (12), custom Executor, Scheduler (0) 2024.06.29 Java Virtual Thread (11), @scheduled 어노테이션 (0) 2024.06.29 Java Virtual Thread (8), Virtual Thread와 Platform Thread 성능비교 (0) 2024.06.23 Java Virtual Thread (7), Virtual Thread Dump (0) 2024.06.23 Java Virtual Thread (5), Pinned Virtual Thread (0) 2024.06.23