java 执行定时任务

使用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();
		}
	}
}

猜你喜欢

转载自blog.csdn.net/fu__chuan/article/details/88293679