项目使用版本
- Spring Boot v3.5.6
- jdk 25
配置
创建 VirtualThreadConfig 配置类
@Configuration
@EnableAsync
public class VirtualThreadConfig {@Bean(name = "virtualThreadExecutor")public TaskExecutor virtualThreadExecutor() {return new TaskExecutorAdapter(Executors.newVirtualThreadPerTaskExecutor());}@Bean(name = "threadPoolTaskExecutor")public TaskExecutor threadPoolTaskExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setThreadNamePrefix("my-pool-");executor.initialize();return executor;}
}
创建演示服务接口
@Service
public class DemoThreadService {// 使用虚拟线程@Async("virtualThreadExecutor")public CompletableFuture<String> demoVirtualThreadExecutor() {System.out.println("是否为虚拟线程:" + Thread.currentThread().isVirtual() + " 线程名称:" + Thread.currentThread().getName());return CompletableFuture.completedFuture("虚拟线程 " + new Random().nextInt(1000));}@Async("threadPoolTaskExecutor")public CompletableFuture<Integer> demoThreadPoolTaskExecutor() {System.out.println("是否为虚拟线程:" + Thread.currentThread().isVirtual() + " 线程名称:" + Thread.currentThread().getName());return CompletableFuture.completedFuture(new Random().nextInt(1000));}
}
创建controller
@RestController
public class DemoController {@Resourceprivate DemoThreadService demoThreadService;@GetMapping("/demo")public String hello() throws InterruptedException, ExecutionException {CompletableFuture<String> fetchExternalData = demoThreadService.demoVirtualThreadExecutor();demoThreadService.demoThreadPoolTaskExecutor();return "Hello, World! ===> " + fetchExternalData.get();}}
演示结果

