日期:2014-05-17  浏览次数:20752 次

java timer停止的问题??求教
jsp+servlet实现在页面点击开始和结束按钮,在servlet能开始一个timer任务。servlet关键代码如下
String value=request.getParameter("value").trim();  jsp传参,为open或close;
System.out.println("__value"+value);                 
final Timer t1=new Timer();   实例化timer
if(value.equals("open")) {     为open执行mytask任务   
 t1.schedule(new MyTask(),1000,5000);}
if(value.equals("close")){//这个是用来停止此任务的
 try {
   Thread.sleep(2000);
   t1.cancel();
    } catch (InterruptedException e) {
e.printStackTrace();
}
为什么点击结束无法终止呢 ?点击开始再次点击结束的时候又一次实例化了一个timer线程么?那该怎么全部结束呢?还是因为?
请教大侠们,谢了!没分了,不好意思

------解决方案--------------------
楼主你仔细分析下你的代码就知道了,你每次请求上来都去new一个timer实例,当你启动后请求结束了这个timer实例在跑了,当你发出结束请求的时候又new一个timer实例这个timer并不是你启动的那个timer。所以你无法停止原来的事件。
要想停止原来启动的事件你可以把Timer timer=new Timer();作为servlet的成员变量,post或get方法之中就不用在new了直接用这个timer就行了。因为servlet是一个服务应用于多个请求的,可以保证你的timer是同一个对象