使用java的Timer周期性的执行一段代码,使用的方法是Timer.schedule(TimerTask task, long delay, long period)delay设定的是10秒;period设定的是60秒服务器启动后,在TimerTask中判断如果当前时间是23:00,就发送一个mail给指定的人,但现在不知道为什么,每天都是执行两遍小弟初用Timer,还望各位高人指点!注:程序部署在linux系统中,服务器是tomcat6.*

解决方案 »

  1.   

    部分代码如下:Start类(继承了HttpServlet)static Timer timerStart = new Timer(false);
    public void init() throws ServletException {        timerStart.schedule(new LinkTimeTask(), 10000, 60000);
        }LinkTimeTask类(继承TimerTask)public void run() {    Date currentTime = new Date();
       SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
       String dateString = formatter.format(currentTime);   if ("01:00".equals(dateString)) {
          【发送mail】
       }
    }
      

  2.   

    通过log信息看到的是执行了两遍,但不是同时执行,是顺序执行
      

  3.   

    打个日志看下init是不是执行了两次吧
      

  4.   

    timerStart.schedule(new LinkTimeTask(), 10000, 60000);不要放到构造函数里。
      

  5.   

    这也许和servlet的线程安全性有关http://www.yesky.com/334/1951334.shtml如果可以的话,别使用static变量了
    把创建对象的代码写在 init 里试试
      

  6.   

    由于获取时间的精确度问题,等待60秒获取的2次时间,未必就真的是1分钟。
    public static long currentTimeMillis()
    返回以毫秒为单位的当前时间。注意,当返回值的时间单位是毫秒时,值的粒度取决于底层操作系统,并且粒度可能更大。例如,许多操作系统以几十毫秒为单位测量时间。