spring6源码阅读(七):spring-core解析
task
package-info.java
该包定义了 Spring 的核心 TaskExecutor 抽象,并提供了 SyncTaskExecutor 和 SimpleAsyncTaskExecutor 实现。
该包显然是线程池相关,额外的还有一个注解也在现代开发非常常见----@Async ,该注解用于启动一个异步的线程执行任务。
此外由于该包属于一种有深度,但完全0构建不依赖其他包的状态,所以必然会使用到大量的设计模式进行优化,以下为ai总结的设计模式
• 主要模式
- 策略(Strategy)
- 用统一的执行抽象替换可变算法族:TaskExecutor 定义执行策略,具体策略由实现类替换(同步、每任务新线程、虚拟线程等)。
- 适配器(Adapter)
- 在 JUC 与 Spring 抽象之间互转:将 Executor/ExecutorService 适配为 TaskExecutor/AsyncTaskExecutor,以及反向将 TaskExecutor 暴露为 ExecutorService。
- 装饰器(Decorator)
- 在不改变原任务的前提下为 Runnable 叠加行为(上下文传播、监控等);执行前对任务进行包装。
- 模板方法(Template Method)
- 在线程创建与并发节流上通过基类提供模板钩子,由子类/调用点在合适位置触发。
- 工厂方法 / 抽象工厂(Factory Method / Abstract Factory)
- 线程创建解耦:优先用 ThreadFactory,否则走模板创建;虚拟线程通过委托产出工厂。
- 命令(Command)
- 将任务建模为可执行命令对象:Runnable/Callable 即命令,执行器只负责调度与运行,装饰器/适配器在外部增强或转换。
- 组合(Composite)
- 组合多个装饰器并保持统一接口,形成可按顺序应用的一致行为管线。
- 委托 / 桥接(Delegation / Bridge)
- 通过委托隔离 JDK21 特性:虚拟线程相关 API 隔离在 VirtualThreadDelegate,在多发行版环境下由对应实现接管。
- Promise/Future(并发模式,非 GoF)
- 使用 Future/CompletableFuture 暴露异步结果;早期的 ListenableFuture 已被标记弃用替换为 CompletableFuture。
- 异常转换(Spring 惯用法)
- 将底层 RejectedExecutionException 统一转换为 TaskRejectedException,对调用方暴露稳定异常体系。