ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Spring boot 使用虚拟线程示例

2026/8/3 14:26:24 拓冰建站 浏览量
Spring boot 使用虚拟线程示例

项目使用版本

  • 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();}}

演示结果

  • 控制台打印信息

image

  • 请求响应信息

image