java定时器Timer的使用
来源:互联网 发布:老a淘宝工具箱 编辑:程序博客网 时间:2024/05/01 11:58
1、构造方法
①Timer timer = new Timer();
②定时器为守护进程
boolean flag=true;
Timer timer1 =new Timer(flag);
③指定定时器的名字,方便指定停止
String name="TimerName2";
Timer timer2 =new Timer(name);
④指定定时器的名字,并指定为守护进程
String name3="TimerName3";
Timer timer3 =new Timer(name3, flag);
2、方法
①延时delay时间后执行task
public void schedule(TimerTask task,long delay)
②指定时间执行taskpublic void schedule(TimerTask task,Date time)
③period:间隔周期 delay:执行延时周期 开始delay时间后间隔period执行task
public void schedule(TimerTask task, long delay,long period)
④间隔period时间,在指定firstTime时间执行
public void schedule(TimerTask task,Date firstTime,long period)
⑤period:间隔周期 delay:执行延时周期 开始delay时间后间隔period执行taskpublic void scheduleAtFixedRate(TimerTask task,long delay,long period)
⑥间隔period时间,在指定firstTime时间执行public void scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
⑦定时器停止运行
public void cancel()
⑧从这个计时器的任务队列中移除所有已取消的任务。public int purge()
3、examplepackage com.assp.admin.web.controller;import java.util.Date;import java.util.Timer;import java.util.TimerTask;public class JobTestController extends TimerTask { String jobName = ""; public JobTestController(String jobName) { this.jobName = jobName; } @Override public void run() { System.out.println("go::::" + jobName); } public static void main(String[] args) { Date t=new Date(); long tl=t.getTime(); Timer timer = new Timer(); boolean flag=true; Timer timer1 =new Timer(flag); String name="TimerName2"; Timer timer2 =new Timer(name); String name3="TimerName3"; Timer timer3 =new Timer(name3, flag); long delay1 = 1 * 1000; long period1 = 1000; // period1:间隔周期 delay1:执行延时周期 //从现在开始 1 秒钟之后,每隔 1 秒钟执行一次 job1 timer.schedule(new JobTestController("job1"), delay1, period1); long delay2 = 2 * 1000; long period2 = 2000; // 从现在开始 2 秒钟之后,每隔 2 秒钟执行一次 job2 timer.schedule(new JobTestController("job2"), delay2, period2); timer1.schedule(new JobTestController("timer1"), delay2, period2); //timer2.schedule(new JobTestController("timer2"), delay2, period2); //timer3.schedule(new JobTestController("timer3"), delay2, period2); timer1.cancel(); }}4、schedule与scheduleAtFixedRate区别
public static void main(String[] args) { Timer timer = new Timer(); SimpleDateFormat fTime = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date d1 = null; try { d1 = fTime.parse("2016/09/02 17:12:00"); } catch (ParseException e) { e.printStackTrace(); } timer.scheduleAtFixedRate(new TimerTask() { public void run() { System.out.println("this is task you do6"); } }, d1, 3 * 60 * 1000);}
上面例子间隔时间是3分钟,指定开始时间是2006/09/02 14:10:00,如果我在14:17:00分执行这个程序,会立刻打印3次
this is task you do6 //14:10
this is task you do6 //14:13
this is task you do6 //14:16
如果用schedule方法,相同参数条件下,在14:17:00执行,则立即执行一次,且下次的执行时间是14:20:00,而不是14:19:00
需要注意:scheduleAtFixedRate和schedule在参数完全相同的情况下,执行效果不同。上面是简单的例子,在实际的项目中,定时任务比较复杂,由于某种原因(如垃圾回
收或者其他后台活动)延迟了某次的执行,则scheduleAtFixedRate方法将快速连续的出现两次或更多的执行,从而使后续执行能力追赶上来;而schedule方法的后续执行也
将被延迟。所以,在长期的运行中,scheduleAtFixedRate执行的频率将整好是指定周期的倒数,schedule执行的频率一般要稍慢于指定周期倒数。
结论:scheduleAtFixedRate 效率总体上高于schedule
4、总结
Timer 的优点:简单易用
Timer 的缺点:
①. Timer是基于绝对时间的。容易受系统时钟的影响。
②. 单线程。所有TimeTask可能会相关影响
③. Timer不会捕获TimerTask的异常,只是简单地停止。这样势必会影响其他TimeTask的执行。
Timer 实现任务调度的核心类:Timer 和 TimerTask。 Timer 负责设定 TimerTask 的起始与间隔执行时间。
Timer 的设计核心: TaskList 、TaskThread。Timer 将接收到的任务丢到自己的 TaskList 中,TaskList 按照 Task 的最初执行时间进行排序。TimerThread 在创建Timer时会启动成为一个守护线程。这个线程会轮询所有任务,找到一个最近要执行的任务,然后休眠,当到达最近要执行任务的开始时间点,TimerThread 被唤醒并执行该任务。之后 TimerThread 更新最近一个要执行的任务,继续休眠。
Timer 使用:使用者只需要创建一个 TimerTask 的继承类,实现自己的 run 方法,然后将其丢给 Timer 去执行即可。
- java timer定时器的使用
- Java Timer 定时器的使用
- Java Timer 定时器的使用
- Java Timer 定时器的使用
- Java Timer 定时器的使用
- Java Timer 定时器的使用
- Java Timer 定时器的使用
- Java Timer 定时器的使用
- Java Timer 定时器的使用
- Java Timer 定时器的使用
- 【Java】定时器Timer的使用
- java定时器Timer的使用
- Java Timer定时器的使用
- JAVA定时器Timer的使用
- Java 定时器 Timer 的使用
- java定时器的使用(Timer)
- java定时器的使用(Timer)
- java 定时器的使用(Timer)
- 使用纯前端JavaScript 实现Excel IO
- 浅谈JSON和JSONP
- 使用二进制进行BFS Flip Game
- UITableView实现多选行
- MySQL会话变量 和 系统变量
- java定时器Timer的使用
- coreplot 支持64位解决
- C语言sscanf函数格式化参数用户手册
- PLSQL Developer登录的默认密码
- 在ListWidget中添加自定义的Item
- 用JAVA实现顺序表
- windows上安装Storm必定(之单机版)
- Unity 事件统一管理
- Facebook推出强大Android 自动释放内存的图片库Fresco