将任务的Trigger设置为每10秒钟执行一次,然后在执行的任务体内让Thread暂停15秒钟,这样不同的job之间肯定会有时间上的重叠。当启动程序之后,发现前一个job执行结束的时刻的秒数为15,而且第二个本来在10s就执行的job马上就启动了。 由此可见,concurrent属性实际是将job推迟执行了。 本文说不同job不够准确,而且会引起歧义,以为是另一个定时任务,准确的说是下一次执行的相同job。 concurrent 表示是否允许任务并发执行,当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程。简单测试例子验证:
public class ConcurTest {
/** 日志 */
private static final Logger logger = LoggerFactory.getLogger(ConcurTest.class);
public void test() {
logger.error("begin:{}", System.currentTimeMillis());
try {
Thread.sleep(15000);
} catch (Exception e) {
e.printStackTrace();
logger.error("ConcurTest-test:17 {}", e.getMessage());
}
logger.error("end:{}", System.currentTimeMillis());
}
}
xml设置 每10秒钟调用一次,配置如下