当前位置: 首页 > news >正文

成都商城网站建设国外专门做旅游攻略的网站

成都商城网站建设,国外专门做旅游攻略的网站,网站模版开发,柘林网站建设Scheduled注解的作用是什么 Scheduled注解用于标记一个方法为定时任务方法。Spring 会按照指定的时间规则自动调用该方法 Scheduled(fixedRate 5000) public void doTask() {System.out.println("定时任务执行了"); } 上述代码表示每隔 5 秒执行一次 doTask() 方…

@Scheduled注解的作用是什么

Scheduled注解用于标记一个方法为定时任务方法。Spring 会按照指定的时间规则自动调用该方法

@Scheduled(fixedRate = 5000)
public void doTask() {System.out.println("定时任务执行了");
}

上述代码表示每隔 5 秒执行一次 doTask() 方法


@Scheduled注解有哪些常用的配置参数

fixedRate: 固定速率执行,单位是毫秒

例如:@Scheduled(fixedRate = 5000) 表示每隔 5 秒执行一次,无论上一次任务是否完成

fixedDelay:固定延迟执行,单位是毫秒

例如:@Scheduled(fixedDelay = 5000) 表示上一次任务完成后,延迟 5 秒再执行下一次任务

cron:使用 Cron 表达式定义任务执行时间

例如:@Scheduled(cron = "0 0/5 * * * ?") 表示每隔 5 分钟执行一次

initialDelay:初始延迟时间,单位是毫秒

例如:@Scheduled(initialDelay = 10000, fixedRate = 5000) 表示首次延迟 10 秒后执行,之后每隔 5 秒执行一次


如何启用@Shceduled注解

在配置类上添加@EnableScheduling

@Configuration
@EnableScheduling
public class AppConfig {
}

@Sheduled注解的任务是单线程执行的吗?

是的,默认情况下,@Sheduled注解的任务是单线程执行的。所有任务共享一个线程池,如果某个任务执行时间过长,可能会阻塞其他任务的执行。

解决方案

使用@Async注解将任务标记为异步执行。

自定义线程池,配置 Tasksheduler


如何自定义Sheduled任务的线程池

可以通过实现 SchedulingConfigurer接口,自定义任务调度器的线程池

@Configuration
@EnableScheduling
public class SchedulerConfig implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {taskRegistrar.setScheduler(taskExecutor());}@Bean(destroyMethod = "shutdown")public Executor taskExecutor() {return Executors.newScheduledThreadPool(10); // 自定义线程池大小}
}

@Scheduled注解的任务可以动态修改执行时间吗?

默认情况下,@Scheduled 注解的任务执行时间是静态的,无法动态修改。如果需要动态调整任务执行时间,可以使用以下方法:

  1. 使用 ScheduledTaskRegistrar

通过编程方式动态注册和取消任务。

  1. 使用 Quartz 调度框架

Quartz 支持动态修改任务执行时间


@Scheduled 注解的任务异常处理机制是什么?

如果 @Scheduled 注解的任务抛出异常,默认情况下,异常会被捕获并记录到日志中,但不会影响其他任务的执行。

自定义异常处理

可以在任务方法内部使用 try-catch 捕获异常。

或者使用 Spring 的 @ExceptionHandler 注解统一处理异常


如何避免 @Scheduled 任务的重复执行?

在分布式环境中,多个实例可能会同时执行同一个定时任务。为了避免重复执行,可以使用以下方法:

  1. 分布式锁

使用 Redis 或 Zookeeper 实现分布式锁

  1. 数据库唯一约束

在任务执行前插入一条记录,利用数据库的唯一约束避免重复执行


@Scheduled注解的任务执行时间受系统时间影响吗?

是的,@Scheduled 注解的任务执行时间依赖于系统时间。如果系统时间被修改,可能会影响任务的执行

解决方案

使用 NTP 服务同步系统时间。

在任务逻辑中增加时间校验


同一个任务,即使上一次执行还未完成,只要时间到,就会再次执行该任务

由于使用了异步执行,当调用被 @Async 注解标注的方法时,该方法会在新的线程中执行,调用线程不会等待其执行完成。

因此,如果在方法还未执行完时再次调用该方法,Spring 会再次将该任务提交到线程池中,开启一个新的线程来执行该方法,而不会等待上一次执行结束


@Async 异步方法默认使用 Spring 创建 ThreadPoolTaskExecutor

Spring 在开启异步支持后,默认会使用 ThreadPoolTaskExecutor 作为线程池来执行异步任务

这个线程池的配置信息可以在 TaskExecutionAutoConfiguration 类中找到


ThreadPoolTaskExecutor的默认核心线程数为 8 ,默认最大队列和默认最大线程数都是 Integer.MAX_VALUE

  • 核心线程数:核心线程数是线程池始终保持的线程数量。当有新的任务提交时,线程池会优先使用核心线程来执行任务。在默认配置下,ThreadPoolTaskExecutor 的核心线程数为 8。
  • 最大队列:当核心线程都在执行任务时,新提交的任务会被放入队列中等待执行。默认情况下,队列的最大容量为 Integer.MAX_VALUE这意味着队列几乎可以无限容纳任务
  • 最大线程数:当队列已满且核心线程都在执行任务时,线程池会创建新的线程来执行任务,但线程数不会超过最大线程数。默认情况下,最大线程数为 Integer.MAX_VALUE

ThreadPoolTaskExecutor创建新线程的条件是队列填满时,而这样的配置队列永远不会填满

由于默认队列的最大容量为 Integer.MAX_VALUE,在实际应用中,队列几乎不可能被填满。因此,线程池在核心线程都在执行任务时,不会创建新的线程,新的任务会一直被放入队列中等待执行


如果有 @Async 注解标注的方法长期占用线程,在核心 8 个线程数占用满了之后,新的调用就会进入队列,外部表现为没有执行

当被 @Async 注解标注的方法执行时间很长,比如进行 HTTP 长连接等待获取结果,会导致核心线程一直被占用

当 8 个核心线程都被占用后,新的任务会被放入队列中等待

由于队列几乎不会满,线程池不会创建新的线程来执行这些任务,因此从外部看起来,这些新的调用就像没有执行一样

所以我们最好不要用@Aync默认的ThreaPoolTaskExecutor

因为它核心线程数为8,默认线程数为Integer.MAX_VALUE,说明我们有了8个线程执行后,我们就不会再创建线程执行了,因为我们的队列是无界队列,这样子明显不好

http://www.yayakq.cn/news/70859/

相关文章:

  • 企业网站建设对网络营销有哪些影响二级注册建造师信息查询官网入口
  • 网站优化策划方案电子商务网站建设与管理实验总结
  • 做网站平台公司高品质的网站开发
  • 盐城网站建设制作方案网站开发与维护前景
  • 校园网站怎么做HTML广东深圳房价
  • 怎么在网上找做网站的客户宜兴市的城乡建设管理局网站
  • 申请备案网站首页陕西网站建设的内容
  • 为什么网站建设还要续费wordpress页面调用子页面
  • 公司网站建设记哪个科目北大青鸟学费一览表
  • 如何做自己的个人网站男的做直播哪个网站好
  • 电子购物网站建设视频建设工程信息发布网站
  • 网站开发流程属于制作与开发wordpress建设
  • 阿里云服务器创建多个网站深圳官方网站设计
  • 做全屏网站图片显示不全建设网站的相关软件
  • 本机建的网站打开却很慢怎么注册公司需要什么手续
  • 软件公司宣传册设计样本郑州网站优化网络建设有限公司
  • 北京建设银行分行招聘网站网站建设有哪些常用行为
  • 年报是否就是在工商网站做的做动图网站
  • 网站制作专业的公司有哪些wordpress系统api接口
  • 诸暨市住房和建设局网站管理系统定制开发流程
  • 湖北襄阳住房保障和城市建设局网站市场营销平台
  • 菏泽市建设局网站网站构架图怎么做
  • 网站展现形式凡科快图好用吗
  • 河北省住房和城乡建设厅 网站百度推广一年大概需要多少钱
  • 常州平台网站建设网站建设的公司开发方案
  • 网站建设流程信息wordpress 加速js插件
  • 川制作官方网站网站开发前后端语言
  • 全返网站建设黄页88网怎么推广
  • 网站301怎么做银川品牌网站建设公司
  • dw做网站注册页代码韩国的电商网站