1.为什么要使用定时器呢?
复制代码
1
2
3
4
5(1)一个web应用,如果这个应用规模很大,那它的日志数据就很多,一直存下来服务器的存储量怕是不行,需要隔一段时间删除, 就需要一个线程每隔一段时间去删除日志数据 (2)在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作(例如:每隔一段时间删除日志数据) (3)对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类
2.使用定时器一些注意点
复制代码
1
2
3
4(1)每一个Timer仅对应唯一一个线程 (2)Timer不保证任务执行的十分精确 (3)Timer类的线程安全的
3.Timer和TimerTask
复制代码
1
2
3
4
5
6(1)Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务, 可以指定执行一次或者反复执行多次 (2)TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务 (3)具体的TimerTask需要由自己来实现 (4)Timer的实现机制就是内部的调度机制
4.Timer里面的一些常见方法
复制代码
1
2
3
4
5
6
7
8
9
10
11
12(1)调用方法:schedule(),scheduleAtFixedRate() <1>根据传入的参数不同,执行时间不同,可以自定义设置 <2>具体可以参考java.util.Timer工具类 (2)方法名称schedule()和scheduleAtFixedRate()两者的区别 <1>schedule()方法更注重保持间隔时间的稳定:保障每隔period时间可调用一次 <2>scheduleAtFixedRate()方法更注重保持执行频率的稳定:保障多次调用的频率趋近于period时间,如果某一次调用时间大于period, 下一次就会尽量小于period,以保障频率接近于period (3)cancel():Timer和TimerTask都有该方法 <1>Timer.cancel():终止此计时器,丢弃任何当前计划的任务 <2>TimerTask.cancel():终止该TimerTask,取消该计时器任务 (4)purge() :从该计时器的任务队列中删除所有取消的任务
5.代码示例:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73package .base; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Timer; import java.util.TimerTask; /** * @author 作者名称 * @date 2019年8月28日 上午11:22:40 * @TODO 描述 */ public class TimerUtil { public static void main(String[] args) throws Exception { System.out.println(new Date().getTime()+"-------开始定时任务--------"); timer1(); timer2(); timer3(); } /** * 第一种方法:设定多长时间(毫秒)后执行任务(两个参数) * 只执行一次 */ public static void timer1() { Timer timer = new Timer(); /* void java.util.Timer.schedule(TimerTask task, long delay) */ timer.schedule(new TimerTask() { public void run() { System.out.println("-------任务执行--------"); } }, 2000);// delay=2000毫秒 后执行该任务 } /** * 第二种方法:设定某个时间执行任务(两个参数) * 只执行一次 */ public static void timer2() { //使用公历类GregorianCalendar Calendar calendar = new GregorianCalendar(); calendar.add(Calendar.MINUTE, 1); calendar.set(Calendar.SECOND, 0); // 一分钟后执行 Timer timer = new Timer(); /* void java.util.Timer.schedule(TimerTask task, Date time) */ timer.schedule(new TimerTask() { @Override public void run() { System.out.println("-------任务执行--------"); } }, calendar.getTime()); } /** * 第三种方法:设定指定任务task在指定延迟delay后进行固定延迟peroid的执行(三个参数) * 每隔固定的设定时间执行 */ public static void timer3() { Timer timer = new Timer(); System.out.println(Thread.currentThread().getName()); /* * void java.util.Timer.schedule(TimerTask task, long delay, long * period) */ timer.schedule(new TimerTask() { public void run() { /* 子线程进行任务的执行 */ System.out.println(Thread.currentThread().getName()); System.out.println("-------设定要指定任务--------"); } }, 1000, 1000); } }
最后
以上就是生动裙子最近收集整理的关于java技术--Timer(定时器)的全部内容,更多相关java技术--Timer(定时器)内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复