前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >定时任务与线程休眠方式比较

定时任务与线程休眠方式比较

作者头像
时间静止不是简史
发布2022-09-26 15:20:48
7140
发布2022-09-26 15:20:48
举报
文章被收录于专栏:Java探索之路Java探索之路

最近在使用线程线程休眠的方式获取第三方接入认证的accessToken时, 思考到此种方式可以通过定时任务的方式实现 但两者在使用方面有什么区别呢? 在此通过阅读源码后对其进行梳理

定时任务原理:

  1. 加载所有实现@Scheduled注解的方法
  2. 将对应类型的定时器放入相应的“定时任务列表”中
  3. 执行相应的定时任务, 在执行定时任务时, 会开启一个线程. 然后执行ScheduledFutureTask定时任务对象.执行结束后, 会设置好下次的执行时间

定时任务的缺点:

  1. 某个定时任务出现异常后, 则无法设置下次执行时间, 因此该任务的后续任务也就无法继续执行
  2. 避免在定时任务中出现死循环, http持续等待无响应

定时任务实现和线程休眠的方式比较:

  1. 定时任务是基于继承Runnable接口实现run方法创建线程, 然后执行定时任务对象ScheduledFutureTask的方式. 一次任务执行失败后, 后续无法继续执行
  2. 线程休眠Thread.sleep/TimeUnit.SECONDS.sleep()的方式, 直接调用本地方法. 一次任务执行失败后, 后续也无法执行.
  3. 两种方式, 如果想要避免在失败后继续执行, 可以采用try…catch… 的方式捕获异常.
  4. 两种方式都创建了线程, 但定时任务的方式每次都会计算下次执行的时间. 而线程休眠方式是直接调用本地方法. 因此线程休眠的方式占用cpu性能更少.

取舍

  1. 如果项目中定时任务很少(1-3个)时, 建议使用线程休眠的方式
  2. 如果项目中定时任务中等(3以上,上限视情况而定), 建议使用定时任务的方式(便于集中处理定时任务相关业务)
  3. 如果项目中定时任务非常多, 以致影响系统正常运行时, 建议可以采取线程休眠的方式来作为优化的一个方向

参考:

https://blog.csdn.net/gaodebao1/article/details/51789225 https://blog.csdn.net/l1028386804/article/details/104585295 https://ask.csdn.net/questions/1096235


ps: 如果有不一样看法的话, 欢迎在评论区交流

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定时任务原理:
  • 定时任务的缺点:
  • 定时任务实现和线程休眠的方式比较:
  • 取舍
  • 参考:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档