定时任务是我们经常遇到的业务场景,我们有很多的功能都需要这样的技术来实现,例如:定时获取一些数据push出去,定时处理一些清理任务,定时检查某个值等。那么我们该怎么实现,在实现中又该注意一些什么?
定时任务就是另开一个线程来执行,其实也是并发的一类,大家可能不好理解,说定时不就是到时间执行一下,怎么还会产生并发,这里主要是看两个指标,一是看执行频率,二是看每次执行的时间,如果执行频率高并且执行任务又会很耗时,那么这时候就形成了并发,当然还有一种情况那就是,定时的job中调用其它类的方法,而正常的业务逻辑中也调用那个类的方法,那么这时在某个巧合的时间也有可能对那个类的调用发生并发。
所以我们在写定时任务的时候也要注意这么两点:
1:如果执行频率高并且执行任务又会很耗时,要在job的执行方法上加同步处理。
2:如果job里调用其它类方法,那么其它类所提供的方法也要保证发布成线程安全的。
下面我们举例几种实现定时任务的方式:
1:java提供的timer
package com.home.thread.thread10;
import java.util.Date;
import java.util.Timer;
/**
* @author gaoxu
* 实践出真知!
*/
public class TimerMain {
/**
* @param args
*/
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(