使用Timer,TimerTask 执行处理定时任务,每隔一段时间执行
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import org.apache.log4j.Logger;
/**
* 每天指定时间执行任务
* @author guofuchuan
*
*/
public class BlackListTimerManger {
private static Logger logger = Logger.getLogger(TimerManager.class);
private static final long BLACKLIST_TIME = 24 * 60 * 60 * 1000;// 定时任务执行时间间隔
public BlackListTimerManger() {
Timer timer = new Timer();
//这里因为业务要求,要求求每四个小时执行下定时任务,所以我们这里我们获取6个任务实例,每个任务间隔24小时执行
for (int i = 0; i < 24; i += 4) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, i);// 动态时间 每隔4小时执行一次
calendar.set(Calendar.MINUTE, 40);
calendar.set(Calendar.SECOND, 0);
Date date = calendar.getTime();// 第一次执行定时任务的时间
// 如果第一次执行定时任务的时间 小于 当前的时间
// 此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
if (date.before(new Date())) {
date = this.addDay(date, 1);
}
logger.info("黑名单下载线程初始化,执行时间都有:" + new SimpleDateFormat("HH:mm:ss").format(date));
timer.schedule( new GetBlackListTimerTaskRun(), date, BLACKLIST_TIME);// 黑名单
}
timer.schedule( new GetBlackListTimerTaskRun(), 1000);//程序启动时候执行一遍任务
}
// 增加或减少天数
public Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}
public static void main(String[] args) {
new BlackListTimerManger();
}
}
public class GetBlackListTimerTaskRun extends TimerTask {
private static Logger logger = Logger.getLogger(GetBlackListTimerTaskRun.class);
@Override
public void run() {
try {
//需要定时执行的业务代码可以在此处编写
//Thread.sleep(60000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}