为了弥补Timer 的上述缺陷,在Java 5的时候推出了基于线程池设计的 ScheduledExecutor。其设计思想是:每一个被调度的任务都会由线程池中一个线程去执行,因此任务是并发执行的,相互之间不会受到干扰。但需要注意的是只有当任务的执行时间到来时,ScheduedExecutor 才会真正启动一个线程,其余时间 ScheduledExecutor 都是在轮询任务的状态。

public class MainActivity extends AppCompatActivity {private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
//        textView = (TextView) findViewById(R.id.text);
        testScheduledExecutorWay();}private static void testScheduledExecutorWay(){ScheduledExecutorService service = Executors.newScheduledThreadPool(10);//创建线程池的方式有几种,可以根据业务具体选择long initialDelay1 = 1;long period1 = 1;// 从现在开始1秒钟之后,每隔1秒钟执行一次job1
            service.scheduleAtFixedRate(new ScheduledExecutorTest("job1"), initialDelay1,period1, TimeUnit.SECONDS);long initialDelay2 = 1;long delay2 = 1;// 从现在开始1秒钟之后,每隔1秒钟执行一次job2
            service.scheduleWithFixedDelay(new ScheduledExecutorTest("job2"), initialDelay2,delay2, TimeUnit.SECONDS);}static class ScheduledExecutorTest implements Runnable{private String jobName = "";public ScheduledExecutorTest(String jobName) {super();this.jobName = jobName;}@Overridepublic void run() {System.out.println(getNowTime()+"执行作业:" + jobName);}}public static String getNowTime(){Date now = new Date();SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");// 可以方便地修改日期格式return dateFormat.format(now);}}

ScheduledExecutorService 中两种最常用的调度方法 ScheduleAtFixedRate 和 ScheduleWithFixedDelay。其中ScheduleAtFixedRate 每次执行时间为上一次任务开始起向后推一个时间间隔,即每次执行时间为 :initialDelay, initialDelay+period, initialDelay+2*period, …;而ScheduleWithFixedDelay 每次执行时间为上一次任务结束起向后推一个时间间隔,即每次执行时间为:initialDelay, initialDelay+executeTime+delay, initialDelay+2*executeTime+2*delay。所以两种方式异同在于ScheduleAtFixedRate 是基于固定时间间隔进行任务调度,ScheduleWithFixedDelay 取决于每次任务执行的时间长短,是基于不固定时间间隔进行任务调度。

转载于:https://www.cnblogs.com/Ocean123123/p/10990889.html

ScheduledExecutor定时器相关推荐

  1. java 定时器 倒计时_Java:多种方式实现倒计时定时器

    多种方式实现倒计时定时器 github链接:https://github.com/Al-assad/Java-Gadgets/tree/master/count_down 1.简易方式实现 /** * ...

  2. spring定时器@Scheduled的原理和实现分析

    目录 一 简单介绍 二 为什么要加@EnableScheduling, @Scheduled才生效 三 什么时候什么地方解析@Scheduled 四,思考 一 简单介绍 我们可以通过如下方式使用定时器 ...

  3. 一文吃透JAVA定时器格式

    JAVA 定时器时间格式 ​ 基本格式: [秒]  [分]  [小时]  [日]  [月]  [周]   [年] 序号 说明 是否必填 允许填写的值 允许使用的通配符 1 秒 是 0-59 ,   - ...

  4. Timer定时器开发

    Timer定时器开发 定时器的作用是不占线程的等待一个确定时间,同样通过callback来通知定时器到期. 参考:https://github.com/sogou/workflow 定时器的创建 同样 ...

  5. linux定时器(crontab)实例

    linux实验示例----实现每2分钟将"/etc"下面的文件打包存储到"/usr/lobal"目录下 ·Step1:编辑当前用户的crontab并保存 终端输 ...

  6. c语言程序设计分段定时器,单片机C语言编程定时器的几种表达方式

    原标题:单片机C语言编程定时器的几种表达方式 吴鉴鹰单片机开发板地址 店铺:[吴鉴鹰的小铺] 地址:[https://item.taobao.com/item.htm?_u=ukgdp5a7629&a ...

  7. linux 内核按键抖动,Tiny4412 Linux驱动之按键(定时器防抖动) | 技术部落

    按键抖动示意图 我们平常所用的按键为机械弹性开关,由于触点的弹性作用,按键在闭合时不会马上稳定的接通,而是有一段时间的抖动,在断开时也不会立即断开.抖动时间由按键的机械特性所决定,一般为5ms~10m ...

  8. mysql 定时器不能持续循环执行_定时器,不循环执行指定方法?如何解决?

    ⁽⁽ଘ你管我管你疯啊ଓ⁾⁾ 01-22 加粗 标红 插入代码 插入链接 插入图片 上传视频 请 登录 后发表内容 关闭 新增或编辑超链接 链接地址 关闭 插入视频 视频链接 messageScroll ...

  9. oracle定时器怎么开启,Oracle的定时器使用示例

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. --Oracle定时job --数据库执行此脚本时时,请确保只执行一次,否则会引发错误! ...

最新文章

  1. 《搬砖日记》Obi Rope插件的简单使用
  2. 【Matlab 图像】开闭运算 imopen imclose
  3. 电脑fps低怎么办_电脑想要英雄联盟玩的流畅,主要看哪几个方面?
  4. linux内核定时器死机,浅析linux内核中timer定时器的生成和sofirq软中断调用流程
  5. 如何利用URLOS和云存储打造一个不惧怕宕机的网站环境
  6. ubuntu下载chrome等软件
  7. 【晶体管电路设计】四、共基极放大电路设计
  8. 各种字体.效果和名字对应图. --- by 王朋
  9. java tld 方法重载_java 中的TLD文件
  10. 端口扫描:zenmap工具的使用
  11. 微信小程序开发常见问题解答
  12. 如何彻底删除HbuilderX
  13. cadence617安装教程linux,CentOS7安装cadenceIC617(三) 启动篇
  14. 英国内政大臣表示社交软件加密不能太严
  15. 读书-《番茄工作法图解》
  16. UWB+ZigBee定位技术开创井下空间里的“GPS”导航
  17. 客观赋权法的python实现
  18. Springboot jar包外置教程
  19. JAVA代码行数统计工具(是时候看看程序员真实的的代码量了)
  20. JDK8下载(64位)

热门文章

  1. php安装sphinx扩展,安装php的sphinx扩展模块
  2. 需要显卡还是cpu_玩游戏卡顿,帧数低,是该升级显卡,还是升级cpu?
  3. python字符串反向输出_Python反向字符串– 5种方法和最佳方法
  4. 使用Kotlin的Android ProgressBar
  5. android 人脸检测_Android人脸检测
  6. Java Stream forEach()和forEachOrdered()方法
  7. exclude函数计算_Java Stream exclude()函数删除重复项
  8. java 文件分割器_Java分割器
  9. 学习C++开发技术,常见误解有哪些?
  10. 全栈工程师与架构师的区别是什么?