若任务处理时长超出设置的定时频率时长,本次任务执行完才开始下次任务,下次任务已经处于超时状态,会马上开始执行.
若任务处理时长小于定时频率时长,任务执行完后,定时器等待,下次任务会在定时器等待频率时长后执行
如下例子:
设置定时任务每60s执行一次
若第一次任务时长80s,第二次任务时长20ms,第三次任务时长50ms
第一次任务第0s开始,第80s结束;
第二次任务第80s开始,第110s结束;(上次任务已超时,本次不会再等待60s,会马上开始),
第三次任务第150s开始,第200s结束.
第四次任务第210s开始.....
public class DeviceGenerator {
@Autowired
private DeviceService deviceService;
// 单例
private static DeviceGenerator instance = new DeviceGenerator();
private DeviceGenerator() {
}
public static DeviceGenerator getInstance() {
return instance;
}
public void start() {
ScheduledExecutorService pool = Executors
.newScheduledThreadPool(50);
pool.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
try {
long start = Sys