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,去调度和管理所有的TimerTasktimerService.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,loggingjava.util.propertiesjava.util.timer4.简单的一个例程:
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() { ... //每次需要执行的代码放到这里面。 } };