当前位置:网站首页>Eureka的TimedSupervisorTask类(自动调节间隔的周期性任务)
Eureka的TimedSupervisorTask类(自动调节间隔的周期性任务)
2022-06-21 12:40:00 【51CTO】
欢迎访问我的GitHub
这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos
起因
- 一个基于Spring Cloud框架的应用,如果注册到了Eureka server,那么它就会定时更新服务列表,这个定时任务启动的代码在com.netflix.discovery.DiscoveryClient类的initScheduledTasks方法中,如下(来自工程eureka-client,版本1.7.0):
- 上述代码中,scheduler是ScheduledExecutorService接口的实现,其schedule方法的 官方文档如下所示:

上图红框显示:该方法创建的是一次性任务,但是在实际测试中,如果在CacheRefreshThread类的run方法中打个断点,就会发现该方法会被周期性调用;
因此问题就来了:方法schedule(Callable<V> callable,long delay,TimeUnit unit)创建的明明是个一次性任务,但CacheRefreshThread被周期性执行了;
寻找答案
- 打开的run方法源码,请注意下面的中文注释:
真相就在上面的最后一行代码中:scheduler.schedule(this, delay.get(), TimeUnit.MILLISECONDS):执行完任务后,会再次调用schedule方法,在指定的时间之后执行一次相同的任务,这个间隔时间和最近一次任务是否超时有关,如果超时了就间隔时间就会变大;
小结:从整体上看,TimedSupervisorTask是固定间隔的周期性任务,一旦遇到超时就会将下一个周期的间隔时间调大,如果连续超时,那么每次间隔时间都会增大一倍,一直到达外部参数设定的上限为止,一旦新任务不再超时,间隔时间又会自动恢复为初始值,另外还有CAS来控制多线程同步,简洁的代码,巧妙的设计,值得我们学习;
欢迎关注51CTO博客:程序员欣宸
边栏推荐
- Educoder Web练习题---创建下拉列表
- Summary of several ways to calculate distance
- 机器学习探索共价键碳的亚稳态相图,未来可用于发现或设计亚稳态材料
- [appium stepping pit] close the inspector and open the WebEditor, uiautomator2 exceptions. NullPointerExceptionError: -32001 Jsonrpc er
- Display all indexes of a table in Oracle
- uva11991
- Educoder web exercise - validating forms
- Postgre SQL 支持的数据类型分类
- [Anxin cup 2019]easy_ web-1
- Phpstudy2018 installation and opening directory browsing
猜你喜欢

cartographer_ ceres_ scan_ matcher_ 2d

塔米狗分享:产权交易的方式及其产权交易市场数据化意义

安科瑞BM100系列信号隔离器的实际应用

Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Detection

居家办公初体验之新得分享| 社区征文

Practical application of ankerui BM100 series signal isolator

5000字解析:实战化场景下的容器安全攻防之道

2022年中国手机银行年度专题分析

一篇文章带你搞懂什么是DevOps?

Schéma technique du système de surveillance de l'environnement de la salle de distribution
随机推荐
Educoder web exercises - form structure
PostgreSQL 初步了解(一)
Data type classification supported by postgre SQL
百度交易中台之钱包系统架构浅析
12 tips for achieving it agility in the digital age
cartographer_ceres_scan_matcher_2d
libcef-常用概念-框架特点
SQL左连接的关联条件问题
修修补补一时爽,果断重构有担当——聊聊CRM分布式缓存优化
scrapy_redis分布式爬虫
Educoder web exercises - structural elements
uva11995
《预训练周刊》第50期:无解码变换器、神经提示搜索、梯度空间降维
Artifacial Intelligent Project
分布式事务处理方案大 PK
Libcef common concepts framework features
塔米狗分享:产权交易的方式及其产权交易市场数据化意义
Subnet mask calculation
Apache ShardingSphere 5.1.2 发布|全新驱动 API + 云原生部署,打造高性能数据网关
Educator web exercises - grouping elements