Why
我们有一个任务, 在系统负载较高时需要执行10s, 但是我们的定时任务设置的是每5秒执行, 这样在第5秒时, 同样的任务会再次运行. 这样就会导致有多个线程在执行任务, 如果任务中有临界区, 如文件, 数据库等, 我们的任务会执行失败或者错误.
How
quartz支持以注解的方式禁止同样的任务执行多次:
@DisallowConcurrentExecution
, 只要把这个注解添加到相应的Job
上就可以了.
Better
最好的做法是把这种单线程的任务抽象出来, 做成一个父类, 这样需要单线程的任务就可以直接继承.
@DisallowConcurrentExecution
public abstract class SingleThreadJob implements Job{
}