ScheduledExecutorService scheduleAtFixedRate、scheduleWithFixedDelay以及创建定时心跳
scheduleAtFixedRate
scheduleAtFixedRate
按固定的周期调度,api如下
public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,long initialDelay,long period,TimeUnit unit);
测试代码如下:
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
scheduledExecutorService.scheduleAtFixedRate(()->{logger.info("==============");try {TimeUnit.SECONDS.sleep(2);} catch (InterruptedException e) {e.printStackTrace();}}, 1, 1, TimeUnit.SECONDS);
从代码中可以看出来被调度的runnable
每次都会sleep 2秒,但是scheduledExecutorService设置的是1秒调度一次,接下来我们看下执行结果:
从结果中可以看到,程序并不是1秒打印一次,而是2秒打印一次,是因为scheduleAtFixedRate
中的period
的时长是从runnable
刚开始执行时算起的,如果在runnable
执行完毕之后,时长不足period
,那么则等足period
再执行调度,如果已经超出period
,那么马上开启下一次调度。
scheduleWithFixedDelay
scheduleWithFixedDelay
按固定的延迟调度,api如下
public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command,long initialDelay,long delay,TimeUnit unit);
测试代码如下:
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);
scheduledExecutorService.scheduleWithFixedDelay(()->{logger.info("==============");try {TimeUnit.SECONDS.sleep(2);} catch (InterruptedException e) {e.printStackTrace();}}, 1, 1, TimeUnit.SECONDS);
从代码中可以看到runnable
每次sleep 2秒,scheduledExecutorService设定的是每次延迟1秒执行,接下来我们看下执行的效果:
从结果中可以看到,每隔3秒日志打印了一次,是因为delay
的计算是从runnable
执行的结束开始计算的,所以是这次的runnable
执行完毕之后,开始等待delay
再执行调度。
创建定时心跳
通过ScheduledExecutorService我们可以尝试创建一个心跳测试器,代码如下:
/*** heartBeatTest*/
@Test
public void test3(){ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1);//延迟2秒调用scheduledExecutorService.schedule(()->{doHeartTest(scheduledExecutorService);}, 2, TimeUnit.SECONDS);//为了看效果try {TimeUnit.SECONDS.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}
}/*** 心跳测试* @param scheduledExecutorService*/
private void doHeartTest(ScheduledExecutorService scheduledExecutorService){//测试心跳logger.info("心跳测试==========");//放入一个任务,下一个2秒再做一次测试scheduledExecutorService.schedule(()->{doHeartTest(scheduledExecutorService);}, 2, TimeUnit.SECONDS);
}
执行结果如下:
可以看到每隔2秒程序就做了一次心跳测试。
ScheduledExecutorService scheduleAtFixedRate、scheduleWithFixedDelay以及创建定时心跳相关推荐
- android 实现定时通知,在Android中创建定时通知(例如,针对事件)
对于某些Android应用程序,我想集成以下功能: 用户可以定义他想要被提醒的时间.当时间到了,应用程序应该在通知栏中创建通知,即使此时用户没有使用该应用程序. 为此,需要查看AlarmManager ...
- iSpring QuizMaker教你如何创建定时测验
iSpring QuizMaker是一款测验制作工具,可以用它创建评估,设置自定义评分,并在线评估员工.学生的进度.iSpring Suite是一款在线课程制作工具包,包括iSpring QuizMa ...
- windchill创建定时队列执行
1.指定包下创建队列方法类--CreateQueueForTest: 2.定义队列执行业务类--TestCreateQueue,编写具体业务方法: 3.启动windchill服务,在windchill ...
- dm归档文件配置、sql 日志的开启和关闭以 及基本的操作、创建定时备份和删除备份的作业、数据库物理、逻辑备份还原
1.达梦数据库中归档文件配置. 生产环境必须开启归档日志,且必须限制归档日志保留量,限制方法: 设置归档空间大小限制即指定 SPACE_LIMIT 参数(单位是 MB). 定期删除归档日志(设置定时作 ...
- oracle创建job一年执行,Oracle快速创建定时job执行批量转储过程脚本参考案例
-- 创建短信批量转储存储过程,将已经发送的短信转移至短信历史表 create or replace procedure PUB_SHORTMSG_ARCH_BAT as MSG_ID pub_sho ...
- mysql 在不同数据库中创建定时同步任务,将每分钟数据转每5分钟统计
SHOW EVENTS ; ALTER EVENT e_tdw_realtime_bid_win_ratio_tax ON COMPLETION PRESERVE DISABLE; -- 创建一个存储 ...
- VC创建定时关闭的MessageBox
1.第一种方法:用微软提供的官方文档 From : http://support.microsoft.com/kb/181934/en-us/ Generally, when you want to ...
- c#创建定时执行任务的三种方法
using System; using System.Collections; using System.Threading;public class Test {public static void ...
- ScheduledExecutorService的简单使用、scheduleAtFixedRate和scheduleWithFixedDelay区别
ScheduledExecutorService的简单使用.scheduleAtFixedRate和scheduleWithFixedDelay区别 ScheduledExecutorService ...
最新文章
- 面向对象----封装之proprty
- python详细安装教程linux-Linux手动安装新版本Python教程(CentOS)
- LiveVideoStack调查问卷
- 洛谷 深基 第1部分 语言入门 第5章 数组与数据批量存储
- opencv在python环境下的安装_关于python环境下的opencv安装
- 信息学奥赛一本通 1019:浮点数向零舍入 | OpenJudge NOI 1.2 06
- 机器学习中数据预处理的方式
- python零基础好学吗-Python零基础好学吗?零基础如何学习Python?
- mysql 忘记密码, 亲测有效解决方案,Access denied for user ‘root’@’localhost’ (using password: YES)...
- 44. Element insertBefore() 方法
- Luogu5607 [Ynoi2013] 无力回天 NOI2017
- [C++] 导入FLTK几乎所有头文件
- 使用java对pdf文档进行分解和合成
- 指纹存取控制系统的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- iOS 9的App Thinning方案如何节省存储空间
- w7设置双显示器_Win7系统双屏显示设置的方法
- csp模拟题-炉石传说
- 面试官:Redis中哈希分布不均匀该怎么办
- Termios 函数说明
- delphi XE的字符串处理
热门文章
- 【VUE】两种vue跳转地址传递参数的方法
- 初用 IRC freenode
- 【肖广老师 银行绩效提升专家】
- Linux如何重启oracle监听,Linux下重启oracle服务及监听器和实例详解
- oracle向上取整10倍数,Oracle四舍五入,向上取整,向下取整
- **ie浏览器报语法错误**
- Linux insmod指令原理
- C语言 中的 数据类型 超详解
- Shell:标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr)介绍
- 深度学习优化入门:Momentum、RMSProp 和 Adam