日期:2014-05-20  浏览次数:21277 次

quartz定时任务如何防止前一次任务未执行完成,直接跳过本次任务的启动?
求教:
quartz定时任务如何防止前一次任务未执行完成,取消本次任务的触发,从而防止同一个任务的并发执行?


public class JobOne implements Job {

private static final Logger LOGGER = LoggerFactory
.getLogger(JobOne.class);

/**
 * 任务是否正在执行标记 :false--未执行; true--正在执行; 默认未执行
 */
private static boolean isRun = false;

public void execute(JobExecutionContext jobContext)
throws JobExecutionException {
// 任务正在执行,跳过本次执行
if (isRun) {
JobDetail jobDetail = jobContext.getJobDetail();
LOGGER.info(jobDetail.getGroup() + "." + jobDetail.getName()
+ ":前一次未执行完,跳过本次任务!");
return;
}
isRun = true;
task();
isRun = false;
}

/**
 * 任务执行的主题
 */
protected  void task(){

};

}


小弟原本想在每个任务中都加一个静态变量,标记前一次任务的触发是否执行完成,如果没执行完成跳过本次任务的触发,感觉多此一举,目前没想到好的方法,求教---不胜感激。

------解决方案--------------------
用Timer实现吧 
------解决方案--------------------
引用:
quartz能够配置concurrent。


我记得有这个配置的,不过有好久没用过了。如果不能配置,那你就用synchronized手工同步一下就可以了。
------解决方案--------------------
你的方法也可以,或者用一个线程池,被吊起的任务放到线程池里,如果线程任务又被调起就判断线程池里是否有之前相同的任务,如果有就跳过。没有就启动线程并放到线程池里。