近期有学习Java 的定时任务处理,网上也有类似的文章,这里只是记录自己的学习经过。
首先是使用Java自带的Timer控件进行处理,本人其实也是通过其他人的案例进行学习,在文章的最后,都有参考的URL出处,如有错误,欢迎指正。
这个是使用Java 的TimerTask 进行定时任务的运行,这个比较简单。
步骤1. 创建一个类,继承TimerTask,重写Run方法:
import java.util.TimerTask;
public class TaskSheduleTimer extends TimerTask{
@Override
public void run() {
System.out.println("TaskSheduleTimer run:" + new Date());
}
}
步骤2. 在main方法中调用:
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new TaskSheduleTimer(), 2*1000); // 2秒运行一次
//timer.scheduleAtFixedRate(new TaskSheduleTimer(), 2, 2*1000); // 每隔2秒运行一次
}
可以通过参数来控制间隔调用的时间。
步骤3. 如果需要在制定的时间运行,需增加Calendar 对象处理,(此部分没有实现过,转自资料2)
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);
此案例没有使用任何的配置文件实现任务的调度,但是限制也是比较大,在实际应用中,一般还是通过配置文件进行处理,这里只是记录一下自己的学习轨迹。
Timer 的优点在于简单易用,但由于所有任务都是由同一个线程来调度,因此所有任务都是串行执行的,同一时间只能有一个任务在执行,前一个任务的延迟或异常都将会影响到之后的任务。
本文参考了以下资料:
1. http://blog.csdn.net/qingzhizhu888/article/details/4500922 。讲述了两种主流的定时任务方式。
2. http://blog.csdn.net/ahxu/article/details/249610 这个比较全,讲解也比较全面。