scheduleAtFixedRate定时任务超时问题

当Java的scheduleAtFixedRate任务执行时间超过设定间隔时,会导致任务超时,即上一任务完成后立即启动下一任务。例如,设定每60秒执行一次,若某次任务耗时80秒,那么下一任务将在80秒而不是120秒后开始,造成超时。而如果任务时间少于间隔,定时器会等待完整间隔再执行。这种行为可能导致任务执行时间不均匀。
摘要由CSDN通过智能技术生成

若任务处理时长超出设置的定时频率时长,本次任务执行完才开始下次任务,下次任务已经处于超时状态,会马上开始执行.

若任务处理时长小于定时频率时长,任务执行完后,定时器等待,下次任务会在定时器等待频率时长后执行

如下例子:

设置定时任务每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
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值