目录

java-指定时间执行任务

目录

java 指定时间执行任务

package com.lyis.listener; import java.util.Calendar; import java.util.Date; import java.util.Timer; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import com.lyis.task.NoticeTask; public class WebContextListener implements ServletContextListener{ private Timer timer; public void contextDestroyed(ServletContextEvent sce) { if(timer != null) { timer.cancel(); } } public void contextInitialized(ServletContextEvent sce) { timer = new Timer(); Calendar calendar = Calendar.getInstance(); // 指定01:00:00点执行 calendar.set(Calendar.HOUR_OF_DAY, 1); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); Date date = calendar.getTime(); timer = new Timer(); timer.schedule(new NoticeTask(),date); // 若需循环执行,需改为以下代码 // 任务执行周期(毫秒) // Long period = Long.valueOf(24 * 60 * 60 * 1000); // timer.schedule(new NoticeTask(), date, period); } }

package com.lyis.task; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimerTask; public class NoticeTask extends TimerTask{ public void run() { System.out.println(“定时执行,当前时间:” + getTimeStamp()); } private String getTimeStamp() { SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月dd日 HH:mm:ss”); return sdf.format(new Date()); } }


如果是循环定时执行还存在一些问题:

假如任务定在09:00:00执行,下一次执行则会受服务启动时间影响

如果在09:00:00之后重启了服务,则下一次任务不是在指定的时间执行,而是服务启动时间,反之则能按指定时间执行任务。