Java定时器
来源:互联网 发布:局域网 9000端口 编辑:程序博客网 时间:2024/05/29 11:48
今天研究了一下Java的定时器,下面简单说一下并给出案例
## 简介 ##
定时器顾名思义就是起到定时作用,定时执行任务,启动一个定时器,其底层就会启动一个线程,你也可以理解,定时器是就是定时启动一个线程去执行你所要执行的任务!!
要了解定时器,做要了解jdk带的“Timer”和“TimerTask”,
- Timer:我理解是定时器的工具,起到定时作用,和你所要执行的内容无关。
TimerTask是一个接口共实现,这个接口底层又实现了线程接口Runnable,所有必须重写 run方法, 这也印证了上面我说的定时器是启动线程执行任务!
Timer主要有几个构造方法:
1.time.schedule(TimerTask task, Date time);参数 task是TimerTask对象,就是你所要执行的任务, time 是Date对象,是启动时间!
2.time.schedule(TimerTask task, Date time,Long long); 是TimerTask对象,就是你所要执行的任务, time 是Date对象,是启动时间! long 是Long对象,是循环间隔时间!
3.boolean cancel():用于取消计时器任务。
4.scheduleAtFixedRate(TimerTask task, Date time, long long):是TimerTask对象,就是你所要执行的任务, time 是Date对象,是启动时间! long 是Long对象,是循环间隔时间!
注意:
time.schedule(TimerTask task, Date time,Long long)和scheduleAtFixedRate(TimerTask task, Date time, long long) 这两个构造方法看是一样,但是内部不一样:
schedule(TimerTask task, Date time,Long long):如果执行任务的时间没有被延时,那么下一次执行时间参考上一次任务的“开始”时间来计算
scheduleAtFixedRate(TimerTask task, Date time, long long):如果执行任务的时间没有被延时,那么下一次执行时间参考上一次任务的“结束”时间来计算
简单定时任务案例:
package Thread;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class Test3 {private static Timer time=new Timer();//初始化定时器工具 public static void main(String[] args) { try { MyTask1 mt=new MyTask1();//初始化定时任务 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strTime="2017-09-01 15:22:00"; Date date=sdf.parse(strTime);//设置定时器起始时间 time.schedule(mt, date); } catch (Exception e) { e.printStackTrace(); }}}/** * 定时任务 * @author user * */class MyTask1 extends TimerTask{ /** * 所要定时的内容写在run里面 */ @Override public void run(){ try { System.out.println("运行了MyTASK 开始运行时间:"+new Date().toLocaleString()); Thread.sleep(3000);//暂停3秒 System.out.println("运行了MyTASK 结束运行时间:"+new Date().toLocaleString()); } catch (Exception e) { e.printStackTrace(); }}}
控制台打印结果:
可以看出来运行时间和设定时间一致!
循环案例
package Thread;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class Test1 { private static Timer time=new Timer(); public static void main(String[] args) { try { MyTask mt= new MyTask(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strTime="2017-09-01 16:19:00"; Date date=sdf.parse(strTime); time.schedule(mt,date,2000);//循环 } catch (Exception e) { e.printStackTrace(); }}static class MyTask extends TimerTask{ @Override public void run(){ try { System.out.println("运行了MyTASK 开始运行时间:"+new Date().toLocaleString()); } catch (Exception e) { e.printStackTrace(); } }}}
可以看出来每隔两秒执行一次
- [Java--定时器]--定时器举例
- JAVA定时器
- java 定时器
- JAVA定时器
- java定时器
- JAVA定时器
- Java定时器
- JAVA定时器
- JAVA定时器
- java定时器
- Java定时器
- JAVA 定时器
- java定时器
- java定时器
- java定时器
- java定时器
- java定时器
- java 定时器
- 禁止F5刷新页面和F6获取地址栏焦点
- 【Android】登录界面的实现
- 【Internship life】实习总结
- sql 一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录。
- Hadoop快速入门---(官网)
- Java定时器
- 【MySql】赶集网mysql开发36条军规
- 今天开发中遇到的一个关于初始化赋值问题
- 多态
- 00、js用法心得
- mysql连接池
- tensorflow之浅层(输入输出层)神经网络通过softmax分类mnist数据集
- javaSE之内部类
- 机器学习笔记(一)k近邻算法(k-Nearest Neighbor)