—— 阿尔伯特·爱因斯坦

程序员の奇妙冒险

Spring BootJavaSpring Boot
2025-11-04 15:56阅读:113评论:0

Spring boot 使用虚拟线程示例

项目使用版本 Spring Boot v3.5.6 jdk 25 配置 创建 VirtualThreadConfig 配置类 创建演示服务接口 创建controller 演示结果 控制台打印信息 image 请求响应信息 image

_PROTECTED0_PROTECTED3_PROTECTED1_PROTECTED4_PROTECTED2__
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@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;
}
/** @Async 使线yml@Async 使线
* spring:
* threads:
* virtual:
* enabled: true
*/
@Bean
@ConditionalOnProperty(value = "spring.threads.virtual.enabled", havingValue = "false")
public AsyncTaskExecutor applicationTaskExecutor() {
return new SimpleAsyncTaskExecutor();
}
}
 
_PROTECTED0__
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@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)
);
}
}
 
_PROTECTED0__
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@RestController
public class DemoController {
 
@Resource
private DemoThreadService demoThreadService;
 
@GetMapping("/demo")
public String hello() throws InterruptedException, ExecutionException {
CompletableFuture<String> fetchExternalData = demoThreadService.demoVirtualThreadExecutor();
demoThreadService.demoThreadPoolTaskExecutor();
return "Hello, World! ===> " + fetchExternalData.get();
}
 
}
 
_PROTECTED0__
  • 控制台打印信息
!image
  • 请求响应信息
!image
评论(0)
暂无评论来抢沙发吧~