spring线程池相关接口和类
- 接口:TaskExecutor、AsyncTaskExecutor、AsyncListenableTaskExecutor、SchedulingTaskExecutor
- 实现类:ThreadPoolTaskExecutor
- 配置类:TaskExecutionProperties、
corePoolSize:线程池维护线程最小的数量,默认为1
maxPoolSize:线程池维护线程最大数量,默认为Integer.MAX_VALUE
keepAliveSeconds:(maxPoolSize-corePoolSize)部分线程空闲最大存活时间,默认存活时间是60s
queueCapacity:阻塞任务队列的大小,默认为Integer.MAX_VALUE,默认使用LinkedBlockingQueue
allowCoreThreadTimeOut:设置为true的话,keepAliveSeconds参数设置的有效时间对corePoolSize线程也有效,默认是flase
threadFactory::用于设置创建线程的工厂,可以通过线程工厂给每个创建出来的线程设置更有意义的名字。使用开源框架guava提供的ThreadFactoryBuilder可以快速给线程池里的线程设置有意义的名字
rejectedExecutionHandler:拒绝策略,当队列workQueue和线程池maxPoolSize都满了,说明线程池处于饱和状态,那么必须采取一种策略处理提交的新任务。这个策略默认情况下是AbortPolicy,表示无法处理新任务时抛出异常,有以下四种策略,当然也可以根据实际业务需求类实现RejectedExecutionHandler接口实现自己的处理策略
①AbortPolicy:丢弃任务,并且抛出RejectedExecutionException异常
②DiscardPolicy:丢弃任务,不处理,不抛出异常
③CallerRunsPolicy:只用调用者所在线程来运行任务
③DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务,并且重复该操作
核心线程池保持常在,当核心线程池达到上限,将后续任务排到阻塞队列中,当阻塞队列排满后,扩容线程数量,当线程数量达到最大线程数后,启用拒绝策略。