首页 > 代码库 > java Timer定时器管理类
java Timer定时器管理类
1.java timer类,定时器类。启动执行定时任务方法是timer.schedule(new RemindTask(), seconds*1000);俩参数分别是TimerTask子类,具体执行定时操作所执行的动作,后一个参数是豪秒,代表间隔多久执行一次。
2.TimerTask类,java.util.TimerTask,具体定时执行的操作。里面有个run方法,和线程run方法一样(就是线程)。
5.Timer是一种定时器工具,用来在一个后台线程计划执行指定任务。它可以计划执行一个任务一次或反复多次。
TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务。
6.Timer可以定时多次执行任务,也可以让Timer在固定时间只执行一次。全都是Timer.sehedule()方法,这是重载方法,可以传多个参数。
timer.scheduleAtFixedRate(timerTask, firstTime, period);以固定间隔时间段多次执行。
timer.schedule(timerTask, firstTime);在固定时间执行一次。
7.Timer和TimerTask之间的关系,Timer是TimerTask的管理工具,一个Timer可以对应多个TimerTask,启动多个TimerTask,并管理他们的执行。
既然是一个Timer可以绑定多个TimerTask,我们就在代码里可以封装一个单例类,封装Timer进去。然后用这一个Timer,去调度和管理所有的TimerTask
timerService.startTimerTask(new AlarmTimerTask(), 3 * 1000, 1 * 1000);
timerService.startTimerTask(new AlarmTimerTask2(), 3 * 1000, 1 * 1000);
8.static方法和普通方法没有任何区别,static方法里面的代码,可以随便new一个对象,前提是在代码运行期间。不要再static代码块里执行这个static方法就行。其他运行期间才调用的static方法,可以里面随便包含普通代码。
如: public static TimerService getInstance() {
Timer timer = new Timer();
return instance;
}
2.java util包是个好用的包,里面有logging日志工具类,还有properties配置文件,timer类。所以确实是个工具包,脸面很多工具类。
java.util,logging
java.util.properties
java.util.timer
4.简单的一个例程:
import java.util.Timer;
import java.util.TimerTask;
/**
* Simple demo that uses java.util.Timer to schedule a task to execute
* once 5 seconds have passed.
*/
public class Reminder {
Timer timer;
public Reminder(int seconds) {
timer = new Timer();
timer.schedule(new RemindTask(), seconds*1000);
}
class RemindTask extends TimerTask {
public void run() {
System.out.println("Time‘s up!");
timer.cancel(); //Terminate the timer thread
}
}
public static void main(String args[]) {
System.out.println("About to schedule task.");
new Reminder(5);
System.out.println("Task scheduled.");
}
}
5.还有一种方法可以指定任务的执行时间,如下例,指定任务在11:01 p.m.执行:
//Get the Date corresponding to 11:01:00 pm today.
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 1);
calendar.set(Calendar.SECOND, 0);
Date time = calendar.getTime();
timer = new Timer();
timer.schedule(new RemindTask(), time);
2.终止Timer线程
默认情况下,只要一个程序的timer线程在运行,那么这个程序就会保持运行。当然,你可以通过以下四种方法终止一个timer线程:
调用timer的cancle方法。你可以从程序的任何地方调用此方法,甚至在一个timer task的run方法里。
让timer线程成为一个daemon线程(可以在创建timer时使用new Timer(true)达到这个目地),这样当程序只有daemon线程的时候,它就会自动终止运行。
当timer相关的所有task执行完毕以后,删除所有此timer对象的引用(置成null),这样timer线程也会终止。
第二种方法:让timer线程成为一个daemon线程(可以在创建timer时使用new Timer(true)达到这个目地),这样当程序只有daemon线程的时候,它就会自动终止运行。
如果设成daemon,那么当main线程 结束的时候,程序只剩下timer这个daemon线程,于是程序不会等timer线程执行task就终止了。
当timer相关的所有task执行完毕以后,删除所有此timer对象的引用(置成null),这样timer线程也会终止。
3.注意:一个Timer仅仅对应一个线程,并不是多个线程,而且Timer本身就是一个线程,。即使是间隔时间多次执行,也是同一个线程。一个Timer绑定的多个TimerTask都是运行在Timer这一个线程里的。可以通过java代码测试一下,Timer启动俩TimerTask,在每个TimerTask里输出当前线程的名字thread.currentThread.getName(),肯定是一样的。多个TimerTask是跑在一个Timer线程里的,且这个线程名字就叫Timer-X
二。java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks。
1什么叫匿名内部类?new对象时候,直接写出来实现代码的类,就是创建匿名类
TimerTask task = new TimerTask() {
public void run() {
... //每次需要执行的代码放到这里面。
}
};
java Timer定时器管理类