1. Reactor线程模型基础
在响应式编程中,线程调度是核心概念之一。Reactor框架通过Scheduler接口抽象了线程池管理,主要提供了以下几种内置调度器:
- Schedulers.immediate():立即在当前线程执行
- Schedulers.single():单一线程的线程池
- Schedulers.parallel():固定大小的并行线程池(默认大小为CPU核心数)
- Schedulers.boundedElastic():弹性线程池,适合阻塞IO操作
- Schedulers.fromExecutorService():自定义线程池适配器
提示:在Spring WebFlux应用中,默认使用Netty的事件循环线程,此时阻塞操作必须切换到其他线程池执行。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. subscribeOn深度解析
2.1 工作原理与影响范围
subscribeOn操作符影响的是整个响应式链的订阅过程(subscription time),包括:
- 数据源的初始化(如
Mono.just的构造) - 订阅信号的传递(
Subscription.request) - 所有上游操作符的执行
java复制Flux.range(1, 10)
.subscribeOn(Schedulers.boundedElastic())
.map(i -> {
System.out.println(Thread.currentThread().getName());
return i * 2;
})
.subscribe();
// 所有输出都显示boundedElastic线程
2.2 典型使用场景
- 阻塞IO操作:数据库查询、文件读取等
- CPU密集型初始化:复杂对象构造
- 第三方同步API调用:如传统JDBC
java复制// 数据库查询示例
Mono.fromCallable(() -> jdbcTemplate.queryForObject("SELECT COUNT(*) FROM users", Integer.class))
.subscri
