Java基础巩固之Timer定时器
2014-04-26 18:59
399 查看
Java定时器的实现需要用到两个类 java.util.Timer及java.util.TimerTask
定时器的应用:
1、晚于当前多少时间后执行;
2、每隔一定的时间执行一次;
3、交错执行 如2秒后执行一次,间隔4秒后执行一次,再间隔2秒后执行一次,如此循环;
a、第一种实现方式
创建一个类(MyTimerTask),并创建一个静态变量用于记录对象被创建的次数;
总结:通过count变量计算出调用的奇偶次数,达到交错执行的目的
b、第二种实现方式
创建两个类(MyTimerTask1和MyTimerTask1),在对象中相互调用;
main方法中调用定时器
总结:在两个对象中互相调用达到交错执行的目的。
4、指定某一时刻执行;
指定格式字符串转Date
[b]5、每天的固定时间执行(如每天凌晨1点);[/b]
如果还需要如每周一至周五某个时间点执行等更多功能的调度器,开源的quartz 应该会满足你
定时器的应用:
1、晚于当前多少时间后执行;
public static void main(String[] args) throws Exception { new Timer().schedule(new TimerTask() { @Override public void run() { System.out.println("boom..."); } }, 2000); //晚于当前时间2秒后执行 //每隔1秒输出当前的秒数 用于观察定时器是否按照设置的时间运行 while(true) { System.out.println(new Date().getSeconds()); Thread.sleep(1000); } }
2、每隔一定的时间执行一次;
public static void main(String[] args) throws Exception { new Timer().schedule(new TimerTask() { @Override public void run() { // TODO Auto-generated method stub System.out.println("boom2..."); } }, 2000, 1000);//2秒后第一次执行,之后没1秒执行一次 //每隔1秒输出当前的秒数 用于观察定时器是否按照设置的时间运行 while(true) { System.out.println(new Date().getSeconds()); Thread.sleep(1000); } }
3、交错执行 如2秒后执行一次,间隔4秒后执行一次,再间隔2秒后执行一次,如此循环;
a、第一种实现方式
创建一个类(MyTimerTask),并创建一个静态变量用于记录对象被创建的次数;
class MyTimerTask extends TimerTask { //用于记录对象被创建的次数 private static int count = 0; @Override public void run() { count = (++count % 2); System.out.println("boom3..."); new Timer().schedule(new MyTimerTask(), 2000 + (2000 * count)); } }main方法调用定时器
public static void main(String[] args) throws Exception { new Timer().schedule(new MyTimerTask(), 2000); //每隔1秒输出当前的秒数 用于观察定时器是否按照设置的时间运行 while(true) { System.out.println(new Date().getSeconds()); Thread.sleep(1000); } }
总结:通过count变量计算出调用的奇偶次数,达到交错执行的目的
b、第二种实现方式
创建两个类(MyTimerTask1和MyTimerTask1),在对象中相互调用;
class MyTimerTask1 extends TimerTask { @Override public void run() { System.out.println("boom4-1"); //4秒后调用MyTimerTask2 new Timer().schedule(new MyTimerTask2(), 4000); } } class MyTimerTask2 extends TimerTask { @Override public void run() { System.out.println("boom4-2"); //2秒后调用MyTimerTask1 new Timer().schedule(new MyTimerTask1(), 2000); } }
main方法中调用定时器
public static void main(String[] args) throws Exception { //调用MyTimerTask1 new Timer().schedule(new MyTimerTask1(), 2000); //每隔1秒输出当前的秒数 用于观察定时器是否按照设置的时间运行 while(true) { System.out.println(new Date().getSeconds()); Thread.sleep(1000); } }
总结:在两个对象中互相调用达到交错执行的目的。
4、指定某一时刻执行;
public static void main(String[] args) throws Exception { //将字符串转换成Date Date date = stringToDate("yyyy-MM-dd HH:mm:ss", "2014-04-26 22:08:00"); new Timer().schedule(new TimerTask() { @Override public void run() { // TODO Auto-generated method stub System.out.println("Boom..."); } }, date); //每个1秒输出当前的秒数 用于观察定时器是否按照设置的时间运行 while(true) { System.out.println(new Date().getSeconds()); Thread.sleep(1000); } }
指定格式字符串转Date
private static Date stringToDate(String fmt, String srcDate) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat(fmt); Date date = sdf.parse(srcDate); return date; }
[b]5、每天的固定时间执行(如每天凌晨1点);[/b]
public static void main(String[] args) throws Exception { Date date = stringToDate("yyyy-MM-dd HH:mm:ss", "2014-06-06 01:00:00"); new Timer().schedule(new TimerTask() { @Override public void run() { // TODO Auto-generated method stub System.out.println("Boom..."); } }, date, 86400000); //1000 * 60 * 60 * 24 将24小时转换成毫秒 间隔24小时 则从6月6号开始每天凌晨1点执行一次 }
如果还需要如每周一至周五某个时间点执行等更多功能的调度器,开源的quartz 应该会满足你
相关文章推荐
- 【Java基础】定时器Timer
- Java基础:定时器Timer
- Java 定时器(Timer,TimerTask)基础入门实例代码
- java基础巩固之IO(一)
- java基础巩固之IO(二)
- Java多线程基础使用(Thread|Runable|TimerTask&Timer)
- java基础巩固之网络编程
- java多线程之定时器Timer的使用详解
- 两种方式实现java定时器,使用quartz定时器框架和java自带Timer定时器,编写定时任务
- java定时器的使用(Timer)
- 有两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz。
- java基础巩固训练营(四) 利器(IDE工具) 补充
- java基础巩固训练营【第一轮】(十一) 直面错误--java异常
- java多线程--定时器Timer的使用
- java多线程核心技术 第五章 定时器Timer
- java线程基础巩固---线程生命周期以及start方法源码剖析
- 巩固下java基础,接口与抽象类的区别
- Java 中Timer和TimerTask 定时器和定时任务使用的例子
- Android笔记--JAVA基础知识巩固
- java基础巩固笔记(6)-注解