ScheduledExecutor定时器
为了弥补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定时器相关推荐
- java 定时器 倒计时_Java:多种方式实现倒计时定时器
多种方式实现倒计时定时器 github链接:https://github.com/Al-assad/Java-Gadgets/tree/master/count_down 1.简易方式实现 /** * ...
- spring定时器@Scheduled的原理和实现分析
目录 一 简单介绍 二 为什么要加@EnableScheduling, @Scheduled才生效 三 什么时候什么地方解析@Scheduled 四,思考 一 简单介绍 我们可以通过如下方式使用定时器 ...
- 一文吃透JAVA定时器格式
JAVA 定时器时间格式 基本格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许使用的通配符 1 秒 是 0-59 , - ...
- Timer定时器开发
Timer定时器开发 定时器的作用是不占线程的等待一个确定时间,同样通过callback来通知定时器到期. 参考:https://github.com/sogou/workflow 定时器的创建 同样 ...
- linux定时器(crontab)实例
linux实验示例----实现每2分钟将"/etc"下面的文件打包存储到"/usr/lobal"目录下 ·Step1:编辑当前用户的crontab并保存 终端输 ...
- c语言程序设计分段定时器,单片机C语言编程定时器的几种表达方式
原标题:单片机C语言编程定时器的几种表达方式 吴鉴鹰单片机开发板地址 店铺:[吴鉴鹰的小铺] 地址:[https://item.taobao.com/item.htm?_u=ukgdp5a7629&a ...
- linux 内核按键抖动,Tiny4412 Linux驱动之按键(定时器防抖动) | 技术部落
按键抖动示意图 我们平常所用的按键为机械弹性开关,由于触点的弹性作用,按键在闭合时不会马上稳定的接通,而是有一段时间的抖动,在断开时也不会立即断开.抖动时间由按键的机械特性所决定,一般为5ms~10m ...
- mysql 定时器不能持续循环执行_定时器,不循环执行指定方法?如何解决?
⁽⁽ଘ你管我管你疯啊ଓ⁾⁾ 01-22 加粗 标红 插入代码 插入链接 插入图片 上传视频 请 登录 后发表内容 关闭 新增或编辑超链接 链接地址 关闭 插入视频 视频链接 messageScroll ...
- oracle定时器怎么开启,Oracle的定时器使用示例
下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. --Oracle定时job --数据库执行此脚本时时,请确保只执行一次,否则会引发错误! ...
最新文章
- 《搬砖日记》Obi Rope插件的简单使用
- 【Matlab 图像】开闭运算 imopen imclose
- 电脑fps低怎么办_电脑想要英雄联盟玩的流畅,主要看哪几个方面?
- linux内核定时器死机,浅析linux内核中timer定时器的生成和sofirq软中断调用流程
- 如何利用URLOS和云存储打造一个不惧怕宕机的网站环境
- ubuntu下载chrome等软件
- 【晶体管电路设计】四、共基极放大电路设计
- 各种字体.效果和名字对应图. --- by 王朋
- java tld 方法重载_java 中的TLD文件
- 端口扫描:zenmap工具的使用
- 微信小程序开发常见问题解答
- 如何彻底删除HbuilderX
- cadence617安装教程linux,CentOS7安装cadenceIC617(三) 启动篇
- 英国内政大臣表示社交软件加密不能太严
- 读书-《番茄工作法图解》
- UWB+ZigBee定位技术开创井下空间里的“GPS”导航
- 客观赋权法的python实现
- Springboot jar包外置教程
- JAVA代码行数统计工具(是时候看看程序员真实的的代码量了)
- JDK8下载(64位)
热门文章
- php安装sphinx扩展,安装php的sphinx扩展模块
- 需要显卡还是cpu_玩游戏卡顿,帧数低,是该升级显卡,还是升级cpu?
- python字符串反向输出_Python反向字符串– 5种方法和最佳方法
- 使用Kotlin的Android ProgressBar
- android 人脸检测_Android人脸检测
- Java Stream forEach()和forEachOrdered()方法
- exclude函数计算_Java Stream exclude()函数删除重复项
- java 文件分割器_Java分割器
- 学习C++开发技术,常见误解有哪些?
- 全栈工程师与架构师的区别是什么?