threadpool,threadpooltaskschedule
在实际开发中,我们更多地使用SpringBoot来开发应用。Spring默认提供了一个线程池方便我们开发,即ThreadPoolTaskExecutor。除此之外,SpringFramework中还有ThreadPoolTaskScheduler这两个重要类用于管理线程池。
1. ThreadPoolTaskScheduler 和 ThreadPoolTaskExecutor
1.1 ThreadPoolTaskSchedulerThreadPoolTaskScheduler用于任务调度,支持基于cron表达式的任务。我们需要在spring容器中注入一个ThreadPoolTaskScheduler的bean用于调度定时任务。还需要增加一个缓存存放当前执行任务的ScheduleFuture对象。
1.2 ThreadPoolTaskExecutorSpring更加推荐开发者使用ThreadPoolTaskExecutor类来创建线程池。这个类是对Java中ThreadPoolExecutor的封装,提供了更多功能和配置选项。
2. 定时任务
2.1 向ThreadPoolTaskScheduler提交任务ThreadPoolTaskScheduler的提交任务接口为ScheduledFuture schedule(Runnable task, Trigger trigger)。通过这个接口可以实现基于cron表达式的任务调度。
2.2 区分ScheduledThreadPoolExecutor和ThreadPoolTaskScheduler在PoolSize为1的情况下,测试不同任务提交方式的结果。ScheduledThreadPoolExecutor和ThreadPoolTaskScheduler在功能和用途上有所不同,需要根据具体需求选择使用。
3. Spring定时任务
3.1 使用ScheduledThreadPoolExecutor如果想使用JDK中的定时任务,推荐使用ScheduledThreadPoolExecutor而不是Timer。ScheduledThreadPoolExecutor提供了更多的配置和性能优势。
3.2 Spring中的@ScheduledSpring Task是spring-context模块下提供的定时任务功能。通过@Scheduled注解可以实现简单的定时任务调度,不需要额外引入其他依赖。