设定Timer定时器时,每次执行了两次任务
import java.util.Timer;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class TimerListener implements ServletContextListener {
private ServletContext context = null;
private Timer timer = null;
public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true);
timer.schedule(new TestTimer(), 0, 1000 * 20);
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
}
}
/*打印当前时间类*/
import java.util.Date;
import java.util.TimerTask;
public class TestTimer extends TimerTask {
public void run() {
System.out.println((new Date()));
}
}
/*web监听器*/
<listener><listener-class>com.kanba.init.TimerListener</listener-class></listener>
问题:每次过20秒钟,都打印两条时间记录,执行了两次任务。请各位帮我看看,问题出在哪。
------解决方案--------------------
以下是jdk的API文档中的说明:
public void scheduleAtFixedRate(TimerTask task,
long delay,
long period)
安排指定的任务在指定的延迟后开始进行重复的固定速率执行。以近似固定的时间间隔(由指定的周期分隔)进行后续执行。
你设置第二个参数为0,说明此方法立刻就调用,以后每隔20秒再调用一次,所以20秒后就打印了两条记录。你应该调用一下方法:
schedule(TimerTask task, long delay)
安排在指定延迟后执行指定的任务。
------解决方案--------------------
可能是你忘记关了