传统定时器使用Timer和TimerTask组合使用
java.util.Timer:定时器,用于指定时间后任务执行一次,或者定期重复执行。
java.util.TimerTask:继承了Runnable类,本质上就是一个Runnable对象
Timer和TimerTask定时器主要有两种使用情景:
1)多长时间后,执行一次定时器任务
2)多长时间后,执行一次定时器任务,之后每间隔相同时间执行一次任务
一、定时器的使用
package com.sam; import java.util.Date; import java.util.Timer; import java.util.TimerTask; /** * 传统定时器回顾 * @author SAM * */ public class TraditionalTimerTask { /** * @param args */ public static void main(String[] args) { Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { System.out.println("定时器 TName=" + Thread.currentThread().getName() + ",bombing!"); } }, 1000L, 3000L); // 为了观察,打印当前时间 while (true){ System.out.println(new Date().toLocaleString()); try { Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); } } } }
执行结果:
2017-5-13 17:23:30
定时器 TName=Timer-0,bombing!
2017-5-13 17:23:32
2017-5-13 17:23:33
2017-5-13 17:23:34
定时器 TName=Timer-0,bombing!
2017-5-13 17:23:35
2017-5-13 17:23:36
2017-5-13 17:23:37
定时器 TName=Timer-0,bombing!
2017-5-13 17:23:38
2017-5-13 17:23:39
2017-5-13 17:23:40
定时器 TName=Timer-0,bombing!
可以看到定时器首次1秒后执行,之后每间隔3秒都会重复执行一次定时器任务。
二、定时器巩固
需求:2秒后执行一次任务,接着4秒后执行一次任务,然后又回到2秒后执行一次任务,
紧接着4秒又执行一次任务,如此反复,请写出代码。
package com.sam; import java.util.Date; import java.util.Timer; import java.util.TimerTask; /** * 传统定时器回顾 * 需求:2秒后执行一次任务,接着4秒后执行一次任务,然后又回到2秒后执行一次任务, * 紧接着4秒又执行一次任务,如此反复,请写出代码。 * @author SAM * */ public class TraditionalTimerTask_2 { /** * @param args */ public static void main(String[] args) { // 2秒后执行定时任务 new Timer().schedule(new MyTimerTask(), 2000L); // 为了观察,打印当前时间 while (true){ System.out.println(new Date().toLocaleString()); try { Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); } } } } class MyTimerTask extends TimerTask{ static int count; @Override public void run() { // 奇数4秒,偶数2秒 count = ++count % 2; System.out.println("定时器 TName=" + Thread.currentThread().getName() + ",bombing!"); new Timer().schedule(new MyTimerTask(), 2000L + 2000L*count); } }
执行结果:
2017-5-13 17:45:52
2017-5-13 17:45:53
定时器 TName=Timer-0,bombing!
2017-5-13 17:45:54
2017-5-13 17:45:55
2017-5-13 17:45:56
2017-5-13 17:45:57
定时器 TName=Timer-1,bombing!
2017-5-13 17:45:58
2017-5-13 17:45:59
定时器 TName=Timer-2,bombing!
2017-5-13 17:46:00
2017-5-13 17:46:01
2017-5-13 17:46:02
2017-5-13 17:46:03
定时器 TName=Timer-3,bombing!
接着再深入Timer类一些细节,Timer有两组启动定时器任务的方法,他们可能比较费解:
1)schedule(TimerTask task, long delay, long period)
2)scheduleAtFixedRate(TimerTask task, long delay, long period)
区别:
他们都可以实现:多长时间后,执行一次定时器任务,之后每间隔相同时间执行一次任务;
但是他们又有一些本质的区别,首先schedule是固定延期执行,而scheduleAtFixedRate是固定速率执行。
再具体说:
1)固定延期,根据前一次执行的实际时间来安排每一次执行。
如果由于任何原因(如垃圾回收或者其他后台活动)而延迟了某次执行,则后续执行也将延迟。
2)固定速率,根据已安排的初始执行时间来安排每次执行。
如果由于任何原因(如垃圾回收或者其他后台活动)而延迟了某次执行,
则将快速连续执行两次或者更多任务,从而使后续执行能够“追赶上来”。
注意这时TimerTask的执行需要考虑同步。
最后推荐一个开源项目,quartz,主要用来实现复杂的调度需求。
例如周一至周五早上10点定时收邮件,周六日不收邮件,
这时使用Timer和TimerTask可能比较复杂,使用quartz开源项目可以很容易的解决这类需求。
相关推荐
资源名称:Java多线程与并发库高级应用视频教程22集资源目录:【】01传统线程技术回顾【】02传统定时器技术回顾【】03传统线程互斥技术【】04传统线程同步通信技术【】04传统线程同步通信技术_分割纪录【】05线程...
接着,"02_量化交易项目流程、做什么.mp4"将详细介绍一个完整的量化交易项目从开始到结束的流程,包括数据收集、数据清洗、策略设计、回测验证、实盘部署等步骤,让我们了解量化交易的完整生命周期。 "05_策略运行...
在讨论基于状态机的按键扫描程序之前,我们首先回顾一下常见的按键扫描方法: 1. **死循环扫描方式**:这种扫描方式通常出现在初学者教程或51系列单片机开发板的例子中。其基本原理是在主循环中持续检测按键状态,...
在传统的JavaScript定时器(`setTimeout`或`setInterval`)中,异步请求可能无法按顺序返回结果,导致在进度条显示等场景中出现问题。而使用`interval`配合RxJS的管道方法,我们可以确保请求的顺序和响应的处理顺序...
- 提供了丰富的组件和服务,例如线程池、定时器、信号处理、同步机制等。 - **主要内容**:介绍了如何从源码编译ACE,包括在Windows和Linux平台上的具体步骤。 - **获取ACE**:可以从ACE官方网站下载最新版本的源码...
相比于传统的模拟频率计,数字频率计具有更高的精度、更快的响应速度和更宽的测量范围。 1.2 数字频率计的基本原理 数字频率计的基本工作原理是通过检测输入信号的周期,然后计算单位时间内信号的周期数来确定其...
这项设计旨在结合传统设计方法与现代电子设计自动化技术,以数字信号处理为核心,实现交通管理的自动化。 在第一章“课题背景”中,设计背景部分解释了交通信号灯对于维持交通秩序、提高道路通行能力和减少交通事故...
1回顾Spring MVC的工作流程 2总结Spring MVC的数据绑定 3Spring定时器、拦截器的应用 4跟踪Spring源码,追踪解决问题 前后端分离开发 手把手演示如何串联React技术栈App和管理后台 让后台Form表单提交符合RESTful...
传统的函数信号发生器主要产生正弦波、方波和锯齿波等标准波形,但特殊波形发生器价格较高。 本文档围绕基于51单片机设计的三角波信号发生器展开,该设计旨在产生多种波形,包括三角波、方波和正弦波,并允许用户...
程序运行结果展示了设计的实际效果,课程设计总结则对整个过程进行回顾和分析,可能包括遇到的问题、解决方案以及改进的建议。 在实际交通管理中,采用定时加中断控制的方式可以灵活调整信号灯的时间间隔,适应不同...
在传统的定时控制方式中,交通灯的红绿灯转换间隔是固定的,这往往会导致道路资源的浪费或交通拥堵。例如,设定东西方向60秒,南北方向40秒的通行时间可能无法适应实时的交通需求。而模糊控制技术虽然可以根据车辆...
该软件能够显示从0到24小时59分59秒0.99秒的时间范围,这意味着它可以提供比传统秒表更为精细的时间刻度,精确到百分之一秒,极大地满足了对时间精度有高要求的用户。 在秒表功能的设计上,它通常具备以下关键特性...
- **字符集简史**:回顾字符集的发展历程,从ASCII到Unicode的转变。 - **宽字符和C**:探讨宽字符在C语言中的表示方法和使用技巧。 - **宽字符和WINDOWS**:讲解Windows环境下如何支持和处理宽字符。 #### 3. 窗口...
1. **单片机技术**:AT89S51D是一款基于8051内核的单片机,具备存储器、定时器/计数器、串行通信接口等多种功能,适合用于构建简单的电子系统。 2. **系统设计**:系统设计包括硬件和软件两部分。硬件部分主要涉及...
这种方法打破了传统单片机教学中先理论后实践的模式,通过一系列具体的实验项目来教授单片机的使用方法,使学习过程更加直观、高效。 - **教程内容**: - **上册**: 主要介绍单片机的基本原理、硬件连接、软件编程等...
6. **中断和定时器**:阐述中断处理机制,以及如何利用定时器实现周期性任务或实时响应。 7. **电源管理**:讲解如何在嵌入式系统中优化能源消耗,延长电池寿命。 8. **调试技术**:介绍常用的嵌入式调试工具,如...