首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

关于java.util.Timer的TimerTask的cancel有关问题

2011-12-23 
关于java.util.Timer的TimerTask的cancel问题首先看看我的定时器的代码:public class CleanTimer{private

关于java.util.Timer的TimerTask的cancel问题
首先看看我的定时器的代码:
public class CleanTimer{
  private Timer timer;
  /**
  * Creates a new instance of CleanTimer
  */
  public CleanTimer() {
  }
   
  public void StartService(Date delaytime, Long cycletime) {
  try{
  timer = new Timer();  
   
  timer.scheduleAtFixedRate(new CleanTimerTask(), delaytime, cycletime);  
   
  } catch(Exception ex) {
  ex.printStackTrace();
   
  }
  }  
   
}

public class CleanTimerTask extends TimerTask {
  /** Creates a new instance of CleanTimerTask */
  public CleanTimerTask() {
  }
   
  public void run() {  
  try{
  CleanTask.ExecuteCleanFunction();  
  } catch(Exception ex) {
  ex.printStackTrace();
  }
  }
}
现在有个问题,我的任务是变的,有增有减,增加的时候,我可以new CleanTimer调用StartService()方法添加一个,但是当需要回收掉以前增加的某个TASK的时候,就不知道该怎么做了
Timer 和 TimerTask 都有cancel方法,但是怎么用呀,我怎么才能找到我要cancel掉的Task或者是Timer呢?
看Timer的API中,它的构造方法中有一个Timer(String name)的,说明写的是:创建一个新计时器,其相关的线程具有指定的名称。但是指定名称有说明用呀,我刚开始以为以后可以根据这个名称把所创建的Timer get出来,可以翻到后面的方法中,也没有说是能根据名称找出所创建的方法呀,请教高人,我该怎么做,先谢谢了!在线等!

[解决办法]
我按楼主的思路写了个简单测试程序,运行后是没问题的,楼主再好好检查检查代码吧:

CleanTimer:

Java code
public class CleanTimer {        private static Map<String,Timer> mapTimer=new HashMap<String,Timer>();       private CleanTimer() {    }        public static void StartService(String taskName) {        try{            mapTimer.put(taskName,new Timer());            CleanTimerTask ctt=new CleanTimerTask(taskName);            mapTimer.get(taskName).scheduleAtFixedRate(ctt, 0, 1000);                   } catch(Exception ex) {            ex.printStackTrace();                  }    }        public static void RemoveTimer(String taskName){        try{            mapTimer.get(taskName).cancel();            mapTimer.remove(taskName);                   }catch(Exception e){            e.printStackTrace();                 }    }} 

热点排行