96SEO 2026-02-23 14:26 15
ScheduledThreadPoolExecutor以及springboot提供的Schduled。

分布式调度框架如QuartZ、Elasticjob、XXL-JOB、SchedulerX、PowerJob等。
任务调度就是在规定的时间内执行的任务或者按照固定的频率执行的任务。
是非常常见的功能之一。
常见的有JDK原生的Timer,
ScheduledThreadPoolExecutor以及springboot提供的Schduled。
分布式调度框架如QuartZ、Elasticjob、XXL-JOB、SchedulerX、PowerJob等。
本文主要讲解非分布式环境下的Scheduled任务调度讲解以及Scheduled结合多线程和Async异步任务的使用。
当然在任务不是很多的情况下Scheduled也可以结合如Redis的锁机制实现分布式的任务调度但是还是建议在分布式环境下使用分布式调度框架如QuartZ、Elasticjob、XXL-JOB、SchedulerX、PowerJob等。
xmlnshttp://maven.apache.org/POM/4.0.0
xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0
https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.1.6/versionrelativePath/
--/parentgroupIdcom.txc/groupIdartifactIdscheduleddemo/artifactIdversion0.0.1-SNAPSHOT/versionnamescheduleddemo/namedescriptionscheduleddemo/descriptionpropertiesjava.version17/java.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationimagebuilderpaketobuildpacks/builder-jammy-base:latest/builder/imageexcludesexcludegroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/exclude/excludes/configuration/plugin/plugins/build/project2.2、按照固定间隔执行
fixedDelay按照固定间隔执行上一个任务的结束到下一个任务的开始间隔。
initialDealay:延迟启动启动之后指定时间再执行调度任务
EnableScheduling开启任务调度写在类上只开启当前类中的任务调度如果写在启动类上则开启项目中的所有任务调度。
说明1fixedRate:按照固定频率执行任务如每三秒执行一次上一个任务下次任务的开始由于此时是单线程下一个任务开始需要等上一个任务结束。
说明2我们通过Thread.sleep(5000)设置任务执行需要2s时间
LocalDateTime.now());Thread.sleep(2000);log.info(process执行fixedRate结束
}结果分析从结果中可以看出由于设置process执行的时间为2s钟process按照固定的频率(3s)每3s执行一次第一次开始是22:19:22第二次开始是22:19:25
说明1fixedRate:按照固定频率执行任务如每三秒执行一次上一个任务下次任务的开始由于此时是单线程下一个任务开始需要等上一个任务结束。
说明2我们通过Thread.sleep(5000)设置任务执行需要5s时间
LocalDateTime.now());Thread.sleep(5000);log.info(process执行fixedRate结束
从结果可以看出虽然设置固定的频率是3s但是由于在单线程情况下下次任务的开启需要等待上一个任务的结束第一次任务开始时间为22:17:43第二次任务开启时间为22:17:48中间间隔了5s钟。
cron:可以通过特性的公式设定定时任务任务生成网站https://cron.qqe2.com/
LocalDateTime.now());Thread.sleep(5000);log.info(process执行fixedRate结束
加入多线程的目的是为了程序执行的效率能够提高。
但是在设置多线程的时候不能开辟过多的线程因为线程资源非常的消耗cpu资源必要的时候需要使用分布式任务调度。
理论上当process1结束的时候下次process1启动的时候需要等待process2执行结束否则1不能启动应该这个时候依旧是单线程。
LocalDateTime.now());Thread.sleep(5000);log.info(process1执行结束
LocalDateTime.now());Thread.sleep(5000);log.info(process2执行结束
从输出结果可以看出process2的开始是等到process1结束后才执行的。
在启动类中定义线程池。
值不需要设置太大现成对cpu资源消耗大搞不好容易让系统宕机。
设置多线程后直接启动程序继续观看process1和process2的输出情况。
org.springframework.boot.SpringApplication;
org.springframework.boot.autoconfigure.SpringBootApplication;
org.springframework.context.annotation.Bean;
org.springframework.scheduling.TaskScheduler;
org.springframework.scheduling.annotation.EnableAsync;
org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;SpringBootApplication
{SpringApplication.run(ScheduleddemoApplication.class,
taskScheduler(){ThreadPoolTaskScheduler
ThreadPoolTaskScheduler();//设置线程池中线程的数量//多线程对cpu资源消耗较大值不能太大。
taskScheduler.setPoolSize(5);return
process1和process2使用的是不同的线程,一个线程为taskSheduler-1,一个线程为taskSheduler-2。
而且process1和process2是同时启动的没有出现相互等待的情况因为现在使用的是多线程的情况。
在上面的案例中虽然process1和process2同时执行了没有出现相互等待的情况。
但是第二次process1和process2执行依旧是等待程序5s结束后再等待3是执行。
name如何能够实现即使process1执行时间为5s,但是下一次process1的启动依旧是3s后。
而不是当前的8是后。
这就可以使用异步任务Async。
当然复杂的异步任务还是建议使用如MQ技术。
注意点Async的使用需要写在单独的一个类中不能与当前调用业务写在一起否则不生效。
https://blog.csdn.net/tangshiyilang/article/details/129440283
{Async//那个方法需要使用异步调用就使用该注解public
{try{Thread.sleep(6000);//模拟异步执行业务的时间}catch
e){System.out.println(e.getStackTrace());}}
{SpringApplication.run(ScheduleddemoApplication.class,
taskScheduler(){ThreadPoolTaskScheduler
ThreadPoolTaskScheduler();//设置线程池中线程的数量//多线程对cpu资源消耗较大值不能太大。
taskScheduler.setPoolSize(10);return
taskScheduler;}}4.3、创建process3和process4方法
process3和process3与之前的process1和process2方法一样都是基于多线程操作。
LocalDateTime.now());asyncTaskScheduled.asyncMethod();log.info(process3执行结束
LocalDateTime.now());asyncTaskScheduled.asyncMethod();log.info(process4执行结束
从结果可以看出虽然异步任务执行的时间为6s,但是process4第一次开始和第二次开始的时间间隔为3s.
https://download.csdn.net/download/tangshiyilang/88627612
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback