一、Java定时器
1、定义: Java定时器(Timer)是java.util.Timer类中提供的一种定时服务,Timer可以使你指定在将来的某个时间点执行某件任务,也可以指定每隔一段时间就执行某件任务。为了使Timer能够正常执行,必须在Timer创建之后至少启动一个线程来调度它。
2、特点:
(1)Timer实例是线程安全的,可以同时多个线程访问;
(2)Timer是以精度毫秒为单位进行调度;
(3)Timer不会抛出任何检查型异常,只会抛出未检查型异常,也就是RuntimeException的子类;
(4)Timer任务完成后,会自动取消;
(5)Timer可以用来完成简单的任务调度,但不适用于复杂类型的任务调度;
(6)Timer采用懒汉式单例模式,在第一次调用getInstance()方法时会初始化,但是构造函数会进行很多耗时的初始化工作。
3、创建:创建Timer实例需要两步:第一步需要创建Timer对象,第二步调用Timer的schedule()(定时)、scheduleAtFixedRate()(定期)方法进行任务调度:
(1)创建Timer实例: Timer timer = new Timer();
(2)执行定时任务: timer.schedule(TimerTask task, Date firstTime, long period);
(3)执行定期任务: timer.scheduleAtFixedRate(TimerTask task, Date firstTime, long period);
4、使用:遵循使用Java定时器(Timer)的步骤,首先要创建一个Timer实例,然后调用Timer的schedule()或scheduleAtFixedRate()方法进行任务调度,其实Timer的实现原理就是每隔一段时间由一个调度线程notify()所有的TimerTask,也就是回调每一个TimerTask的run()方法。
Timer timer = new Timer();
timer.schedule(timerTask, firstTime, period); // 定时任务
timer.scheduleAtFixedRate(timerTask, firstTime, period); // 定期任务
(1)TimerTask类继承自Java.util.Task,实现了Runnable接口,我们可以实现其run()方法来定制我们的任务。
(2)firstTime参数就是定时执行任务的时间点。
(3)period参数就是定时任务间隔时间长度。
(4)TimerTask定时任务在执行时线程中会临时新建一个线程执行run()。
(5)TimerTask的cancel()或者Scheduler.cancel()可以用来终止定时任务。
5、原理:Timer的实现原理基于Object类的wait()以及notify()方法,当调用定时任务的schedule()方法,会新建Task任务将其加入TimerTaskList列表,Timer会以一个线程形式运行,不断检测是否有定时任务已经到达执行时间,如果定时任务已到达执行时间,Timer会通过notify()方法唤醒Task线程并执行定时任务。
6、示例:
// 创建Timer实例
Timer timer = new Timer();
// 创建定时任务
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
System.out.println(\"timer is running\");
}
};
// 设定定时任务执行的时间
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 10);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date firstTime = calendar.getTime();
// 设置定时间隔,从上一次时间开始,每隔一小时执行一次定时任务
timer.scheduleAtFixedRate(timerTask, firstTime, 3600 * 1000);
1、Java定时器简介:Java定时器是Java语言中使用的定时器处理类,它可以在指定的时间间隔或在特定的时间执行某些任务。它是java中处理定时器任务的有用工具,它可以实现复杂的时间控制功能。
2、 Java定时器的使用方法:Java定时器需要使用java.util.Timer类来进行编程,此外,还可以使用java.util.TimerTask类配合Timer类实现具体的任务。在使用这两个类实现定时任务时,必须实现接口TimerTask。
3、Java定时器的使用步骤:第一步,创建所需的Timer类对象;第二步,定义TimerTask类的对象,实现TimerTask的抽象方法;第三步,使用schedule方法启动定时器;第四步,如果不需要定时器了,使用cancel方法来取消定时器。
4、如何让java定时器持续工作:通常,可以使用定时器按照指定的时间执行一次任务,如果要使java定时器在某一个时间间隔内持续运行,可以使用scheduleAtFixedRate()方法。在使用时,传递给此方法的TimerTask参数也会传递一个数值,它表示在两次执行之间的时间间隔。
5、Java定时器的例子:下面代码是一个使用java定时器的可行示例:Timer timer = new Timer();timer.schedule(new TimerTask(){public void run(){// 定时任务的内容}}, 0, 5000);//每隔5秒执行一次此任务。以上代码会实现每5秒执行一次定时任务。