Java定时器任务

Java定时器任务,java,timer,timertask,Java,Timer,Timertask,我想知道在服务器停止之前,下面的代码是否会无限运行 public class Class1() { public static void main(String args[]) { TimerTask task = new CacheThread(); Timer timer = new Timer(); timer.schedule(task, 1000,10000); } } 在这

我想知道在服务器停止之前,下面的代码是否会无限运行

public class Class1()
 {
   public static void main(String args[])
      {
            TimerTask task = new CacheThread();

            Timer timer = new Timer();
            timer.schedule(task, 1000,10000);
      }
  }
在这里,我调用下面类中的任务:

     package com.verizon.esupport.cache;

     import java.sql.Timestamp;
     import java.util.Date;
     import java.util.HashMap;
     import java.util.TimerTask;


     public class CacheThread extends TimerTask {//implements java.io.Serializable{


 RetrieveHdrFtrContent rhf = RetrieveHdrFtrContent.getSingleInstance();
 HeaderBean hdrbn = HeaderBean.getSingleInstance();

 String header = "";
 String footer= "";
 String sHeader = "";

@Override
public void run() {

    try{
    // TODO Auto-generated method stub
     HashMap headerm = new HashMap();
     HashMap smallHeaderm = new HashMap();
     HashMap footerMapm = new HashMap();

     Date date = new Date();

     header = rhf.headerContent().toString();
    //  headerm.clear();
    //  hdrbn.setLheaderMap(headerm);
        headerm.put("header", header);
        headerm.put("timeStamp", new Timestamp(date.getTime()));
        hdrbn.setLheaderMap(headerm);

        footer = rhf.footerContent().toString();
        footerMapm.clear();
        hdrbn.setLfooterMap(footerMapm);
        footerMapm.put("footer", footer);
        footerMapm.put("timeStamp", new Timestamp(date.getTime()));
        hdrbn.setLfooterMap(footerMapm);

        sHeader = rhf.smallHeader().toString();
        smallHeaderm.clear();
        hdrbn.setLsmallHeaderMap(smallHeaderm);
        smallHeaderm.put("header", sHeader);
        smallHeaderm.put("timeStamp", new Timestamp(date.getTime()));
        hdrbn.setLsmallHeaderMap(smallHeaderm);

        System.out.println("raising exception :: "+(1/0));

    }
    catch(Exception e)
    {
        e.printStackTrace();
        System.out.println("pls continue the task");
    }
}

}

任务
是否会一直执行到
服务器
停止?另外,如果一个任务中出现任何
异常
,执行者将停止还是随后继续执行nex任务,请告知我?是否有人可以回答..

如果在run()方法中引发异常,计时器将停止执行您的任务。 您必须在运行时捕获run()方法中的异常,或者改用ScheduledExecutorService

要停止应用程序,您必须明确地停止线程(或者在本例中取消计时器),因为它不是守护进程线程

已编辑

从JavaDoc()复制的ScheduledExecutorService示例:

导入静态java.util.concurrent.TimeUnit.*;
类蜂鸣器控制{
专用最终计划DexecutorService计划程序=
Executors.newScheduledThreadPool(1);
公共空间{
最终可运行蜂鸣器=新可运行(){
public void run(){System.out.println(“beep”);}
};
最终计划的未来蜂鸣器手柄=
scheduleAtFixedRate(蜂鸣器,10秒,10秒);
scheduler.schedule(新的Runnable(){
public void run(){beeperHandle.cancel(true);}
},60*60,秒);
}
}

它将永远运行。由于捕获了所有异常,因此每个任务运行都会成功完成


当然,这并不能保证程序能够无限地正常工作,因为您对
RetrieveHdrFtrContent
所做的操作可能会产生副作用(例如内存泄漏)。

在RetrieveHdrFtrContent中,我只是读取一个url,获取其内容并将其存储在字符串变量中,然后返回它…仅此而已,不会导致任何内存泄漏。请提供ScheduledExecutorService使用的任何示例。
import static java.util.concurrent.TimeUnit.*;
 class BeeperControl {
    private final ScheduledExecutorService scheduler = 
       Executors.newScheduledThreadPool(1);

    public void beepForAnHour() {
        final Runnable beeper = new Runnable() {
                public void run() { System.out.println("beep"); }
            };
        final ScheduledFuture<?> beeperHandle = 
            scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
        scheduler.schedule(new Runnable() {
                public void run() { beeperHandle.cancel(true); }
            }, 60 * 60, SECONDS);
    }
 }