介绍下用到的方法
java.util.Timer类
线程调度任务以供将来在后台线程中执行的功能。 任务可以安排一次执行,或定期重复执行。
对应于每个Timer对象是单个后台线程,用于依次执行所有定时器的所有任务。 计时器任务应该快速完成。 如果一个定时器任务需要花费很多时间来完成,它会“计时”计时器的任务执行线程。 这可能会延迟随后的任务的执行,这些任务在(和)如果违规任务最后完成时,可能会“束起来”并快速执行。
在最后一次对Timer对象的引用后,所有未完成的任务已完成执行,定时器的任务执行线程正常终止(并被收集到垃圾回收)。 但是,这可能需要任意长时间的发生。 默认情况下,任务执行线程不作为守护程序线程运行,因此它能够使应用程序终止。 如果主叫方想要快速终止定时器的任务执行线程,则调用者应该调用定时器的cancel方法。
如果定时器的任务执行线程意外终止,例如,因为它调用了stop方法,那么在计时器上安排任务的任何进一步的尝试将会产生一个IllegalStateException ,就像定时器的cancel方法被调用一样。
这个类是线程安全的:多个线程可以共享一个单独的Timer对象,而不需要外部同步。
此类不提供实时保证:使用Object.wait(long)方法是调度任务。
Java 5.0引入了java.util.concurrent软件包,其中一个java.util.concurrent程序是ScheduledThreadPoolExecutor ,它是用于以给定速率或延迟重复执行任务的线程池。 这实际上是对一个更灵活的替代Timer / TimerTask组合,因为它允许多个服务线程,接受各种时间单位,并且不需要子类TimerTask (只实现Runnable )。 使用一个线程配置ScheduledThreadPoolExecutor使其等同于Timer 。
实现注意事项:这个类可以扩展到大量并发计划任务(千应该没有问题)。 在内部,它使用二进制堆表示其任务队列,因此计划任务的成本为O(log n),其中n为并发计划任务的数量。
实现注意事项:所有构造函数启动计时器线程。
构造方法
Timer()
创建一个新的计时器。
Timer(boolean isDaemon)
创建一个新的定时器,其相关线程可以指定为 run as a daemon 。
Timer(String name)
创建一个新的定时器,其相关线程具有指定的名称。
Timer(String name, boolean isDaemon)
创建一个新的定时器,其相关线程具有指定的名称,可以指定为 run as a daemon 。
具体实现类详见jdkAPI文档Timer类
java.util.TimerTask类
可以由计时器进行一次性或重复执行的任务。
构造方法
protected TimerTask()
创建一个新的计时器任务。
具体实现类详见jdkAPI文档Timer类
java.util.Calendar类
介绍有点多,就不贴了……
具体实现类详见jdkAPI文档Timer类
下面上代码(我这段代码是在指定时间和间隔执行时间,如需要指定日期或年月,查看Calendar具体方法)
定时器封装类
import java.util.*;
/**
* 定时器
*
* @author Administrator
*
*/
public abstract class TimerServer extends TimerTask {
/**
* 定时器执行任务
*
* @param hours
* 定时时间小时
* @param minutes
* 定时时间分
* @param seconds
* 定时时间秒
* @param interval
* 定时时间间隔
* @param TimerTask对象
*/
public static void event(Integer hours, Integer minutes, Integer seconds, Integer interval, TimerTask timerTask) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hours);// 控制小时
calendar.set(Calendar.MINUTE, minutes);// 控制分钟
calendar.set(Calendar.SECOND, seconds);// 控制秒
Date time = calendar.getTime();// 执行任务时间为12:00:00
Timer timer1 = new Timer();
timer1.schedule(timerTask, time, interval);
}
}
定时器实现类
public class TestTimer extends TimerServer {
static Integer i = 1;
public static void main(String[] args) throws Exception {
TimerServer timerServer = new TimerServer() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("1111111111111111111");
}
};
timerServer.event(11, 38, 50, 60, new TestTimer());
}
@Override
public void run() {
i++;
// TODO Auto-generated method stub
System.out.println("第 " + i + " 次");
}
}