定时任务的开启与关闭,为什么关闭不了定时器 ?????急

jimmypert 2013-05-16 03:47:58
任务类


public class ScheduleTask {
private boolean isRun=false;
private Timer timer=new Timer();

//计划
private int id;
private String nick;//计划名称
private int numbergoods;//上架优化的总数量
private String plantime;
private String cid;//优化范围
private String state;


public ScheduleTask() {
super();
}


get set.......

public static ScheduleTask getName(ScheduleTask name){
if(name == null){
name = new ScheduleTask();
}else{
return name;
}
return name;
}




//---------------------------------------------------------------------------------------------//

/**
* 开启上架优化任务
*/

public void start(String nick){

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 01);
calendar.set(Calendar.MINUTE, 00);
calendar.set(Calendar.SECOND, 0);
// Date time = calendar.getTime();
if(!isRun){
isRun=true;
timer.schedule(new ScheduleJob(nick),1,4000);//在1秒后执行此任务,每次间隔2秒,如果传递一个Data参数,就可以在某个固定的时间执行这个任务.
}
}

/**
* 关闭定时器
*/

public void shut(ScheduleTask name) {

this.isRun=false;
this.timer.cancel();
name = null;
// System.gc();//name.timer.cancel();
System.out.println("关闭:"+name.getNick());
// name = null;
// System.gc();
}


class ScheduleJob extends java.util.TimerTask{
private String name;
protected final SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-MM-dd-EE");
@Override
public void run() {

List<ExecutionTime> taskDate=ExecutionTimeBusiness.getfind(name);

}





}



action 代码


/**
* 开启
* @throws UnsupportedEncodingException
*
*/
public String openTask() throws UnsupportedEncodingException{
HttpServletRequest request = ServletActionContext.getRequest();
String nick=URLDecoder.decode(request.getParameter("nick"),"utf-8");
String status=URLDecoder.decode(request.getParameter("status"),"utf-8");
ScheduleTaskBusiness.changeStatus(status);//修改状态
ScheduleTask task=ScheduleTaskBusiness.findTask(nick);

if(task!=null){

ScheduleTask job =ScheduleTask.getName(task);
job.start(job.getNick());
}
return null;


}
/**
* 任务关闭
* @throws UnsupportedEncodingException
*/
public String occludeTask() throws UnsupportedEncodingException{
HttpServletRequest request = ServletActionContext.getRequest();
String nick=URLDecoder.decode(request.getParameter("nick"),"utf-8");
String status=URLDecoder.decode(request.getParameter("status"),"utf-8");
ScheduleTaskBusiness.changeStatus(status);//修改状态
ScheduleTask task=ScheduleTaskBusiness.findTask(nick);

if(task!=null){

ScheduleTask job =ScheduleTask.getName(task);
job.shut(job);
}
return null;

}
...全文
1117 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimmypert 2013-05-18
  • 打赏
  • 举报
回复
引用 5 楼 h70614959 的回复:
直接调用task.cancelled().来关闭
????
MiceRice 2013-05-17
  • 打赏
  • 举报
回复
引用 2 楼 u010054560 的回复:
操作的不是同一定时器 有什么办法么??
显然应该先保证能所操作的是同一个定时器,我指的是你所希望停止的定时器,跟你之前所启动的定时器,必须是同一个。 你的程序企图使用多个定时器,这个并不是关键问题。
jimmypert 2013-05-17
  • 打赏
  • 举报
回复
引用 6 楼 h70614959 的回复:
timer.cancel();取消定时任务。不会立刻终止任务。而是终止下次的任务发起。已经开始的任务会继续执行,直到执行完毕。
不行 还是停不下来 可以给个 小例子不
chkaka 2013-05-17
  • 打赏
  • 举报
回复
timer.cancel();取消定时任务。不会立刻终止任务。而是终止下次的任务发起。已经开始的任务会继续执行,直到执行完毕。
chkaka 2013-05-17
  • 打赏
  • 举报
回复
直接调用task.cancelled().来关闭
jimmypert 2013-05-17
  • 打赏
  • 举报
回复
引用 3 楼 ldh911 的回复:
[quote=引用 2 楼 u010054560 的回复:] 操作的不是同一定时器 有什么办法么??
显然应该先保证能所操作的是同一个定时器,我指的是你所希望停止的定时器,跟你之前所启动的定时器,必须是同一个。 你的程序企图使用多个定时器,这个并不是关键问题。[/quote] 兄弟 你有什么办法帮我改改么 我改了 很久 还是没改好 我的想法是 :每一个任务类 就是定时器 可是就是关不了
jimmypert 2013-05-16
  • 打赏
  • 举报
回复
操作的不是同一定时器 有什么办法么??
MiceRice 2013-05-16
  • 打赏
  • 举报
回复
程序逻辑不完整,而且看起来比较奇怪; 你最好检查下是否每次你实际操作的定时器对象,都是同一个对象。

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧