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以及创建定时心跳相关推荐

  1. android 实现定时通知,在Android中创建定时通知(例如,针对事件)

    对于某些Android应用程序,我想集成以下功能: 用户可以定义他想要被提醒的时间.当时间到了,应用程序应该在通知栏中创建通知,即使此时用户没有使用该应用程序. 为此,需要查看AlarmManager ...

  2. iSpring QuizMaker教你如何创建定时测验

    iSpring QuizMaker是一款测验制作工具,可以用它创建评估,设置自定义评分,并在线评估员工.学生的进度.iSpring Suite是一款在线课程制作工具包,包括iSpring QuizMa ...

  3. windchill创建定时队列执行

    1.指定包下创建队列方法类--CreateQueueForTest: 2.定义队列执行业务类--TestCreateQueue,编写具体业务方法: 3.启动windchill服务,在windchill ...

  4. dm归档文件配置、sql 日志的开启和关闭以 及基本的操作、创建定时备份和删除备份的作业、数据库物理、逻辑备份还原

    1.达梦数据库中归档文件配置. 生产环境必须开启归档日志,且必须限制归档日志保留量,限制方法: 设置归档空间大小限制即指定 SPACE_LIMIT 参数(单位是 MB). 定期删除归档日志(设置定时作 ...

  5. oracle创建job一年执行,Oracle快速创建定时job执行批量转储过程脚本参考案例

    -- 创建短信批量转储存储过程,将已经发送的短信转移至短信历史表 create or replace procedure PUB_SHORTMSG_ARCH_BAT as MSG_ID pub_sho ...

  6. mysql 在不同数据库中创建定时同步任务,将每分钟数据转每5分钟统计

    SHOW EVENTS ; ALTER EVENT e_tdw_realtime_bid_win_ratio_tax ON COMPLETION PRESERVE DISABLE; -- 创建一个存储 ...

  7. VC创建定时关闭的MessageBox

    1.第一种方法:用微软提供的官方文档 From : http://support.microsoft.com/kb/181934/en-us/ Generally, when you want to ...

  8. c#创建定时执行任务的三种方法

    using System; using System.Collections; using System.Threading;public class Test {public static void ...

  9. ScheduledExecutorService的简单使用、scheduleAtFixedRate和scheduleWithFixedDelay区别

    ScheduledExecutorService的简单使用.scheduleAtFixedRate和scheduleWithFixedDelay区别 ScheduledExecutorService ...

最新文章

  1. 面向对象----封装之proprty
  2. python详细安装教程linux-Linux手动安装新版本Python教程(CentOS)
  3. LiveVideoStack调查问卷
  4. 洛谷 深基 第1部分 语言入门 第5章 数组与数据批量存储
  5. opencv在python环境下的安装_关于python环境下的opencv安装
  6. 信息学奥赛一本通 1019:浮点数向零舍入 | OpenJudge NOI 1.2 06
  7. 机器学习中数据预处理的方式
  8. python零基础好学吗-Python零基础好学吗?零基础如何学习Python?
  9. mysql 忘记密码, 亲测有效解决方案,Access denied for user ‘root’@’localhost’ (using password: YES)...
  10. 44. Element insertBefore() 方法
  11. Luogu5607 [Ynoi2013] 无力回天 NOI2017
  12. [C++] 导入FLTK几乎所有头文件
  13. 使用java对pdf文档进行分解和合成
  14. 指纹存取控制系统的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  15. iOS 9的App Thinning方案如何节省存储空间
  16. w7设置双显示器_Win7系统双屏显示设置的方法
  17. csp模拟题-炉石传说
  18. 面试官:Redis中哈希分布不均匀该怎么办
  19. Termios 函数说明
  20. delphi XE的字符串处理

热门文章

  1. 【VUE】两种vue跳转地址传递参数的方法
  2. 初用 IRC freenode
  3. 【肖广老师 银行绩效提升专家】
  4. Linux如何重启oracle监听,Linux下重启oracle服务及监听器和实例详解
  5. oracle向上取整10倍数,Oracle四舍五入,向上取整,向下取整
  6. **ie浏览器报语法错误**
  7. Linux insmod指令原理
  8. C语言 中的 数据类型 超详解
  9. Shell:标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr)介绍
  10. 深度学习优化入门:Momentum、RMSProp 和 Adam