日期:2014-05-20  浏览次数:20633 次

设定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) 
 安排在指定延迟后执行指定的任务。
------解决方案--------------------
可能是你忘记关了