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

天津建设招聘信息网站上海cms建站

天津建设招聘信息网站,上海cms建站,长江设计公司,免费网站appScheduled注解的作用是什么 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 注解的任务执行时间是静态的无法动态修改。如果需要动态调整任务执行时间可以使用以下方法 使用 ScheduledTaskRegistrar 通过编程方式动态注册和取消任务。 使用 Quartz 调度框架 Quartz 支持动态修改任务执行时间 Scheduled 注解的任务异常处理机制是什么 如果 Scheduled 注解的任务抛出异常默认情况下异常会被捕获并记录到日志中但不会影响其他任务的执行。 自定义异常处理 可以在任务方法内部使用 try-catch 捕获异常。 或者使用 Spring 的 ExceptionHandler 注解统一处理异常 如何避免 Scheduled 任务的重复执行 在分布式环境中多个实例可能会同时执行同一个定时任务。为了避免重复执行可以使用以下方法 分布式锁 使用 Redis 或 Zookeeper 实现分布式锁 数据库唯一约束 在任务执行前插入一条记录利用数据库的唯一约束避免重复执行 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.w-s-a.com/news/451346/

相关文章:

  • 手机做logo用什么网站服务器安全防护
  • 课程分销的网站怎么做北京企业网站建设方案
  • 吴兴区建设局网站湖北企业网站建设
  • 网页与网站的区别是什么2023年8月份新冠
  • 唐山网站建设外包公司安卓手机怎么搭建网页
  • 国内做网站最大的公司计量检测网站平台建设方案
  • 重庆沛宣网站建设网页制作初学者
  • php网站漂浮广告代码网络营销跟网站推广有啥区别
  • wordpress调用图片优化型网站建设的基本要求
  • 郑州模板网站建设策划公司做网站怎么赚钱滑县电
  • 东昌府聊城网站优化秦皇岛市妇幼保健院
  • 做网站能赚钱吗网页升级访问通知天天更新
  • 做网站使用什么软件的免费招聘网
  • 宁波网站建设公司推荐哪家淄博网站制作公司服务
  • 做网站网页挣钱不免费主题wordpress
  • 如何提高你的网站的粘性手机网站整站模板下载
  • 学校网站建设制度网站相关推荐怎么做
  • 昌图网站wordpress 视频外链
  • 企业网站要怎么建设重庆住房城乡建设部网站
  • html5网站特点seo教程培训班
  • 深圳网站建设哪个最好网站 多语
  • 互联网工具型网站创意网络广告
  • 影视公司网站建设网页界面设计分辨率是多少dpi
  • 免费的做微博的网站模板wordpress 页面 首页
  • 摄影图片网站网站辅导运营与托管公司
  • 做课件的网站长春免费建站模板
  • 响应式网站模板下载免费wordpress 小工具移动
  • 网站标签title在线app制作平台
  • 做电器推广的网站简洁大方的网站模板
  • 网站开发的平台100个详情页设计图