关于@Scheduled中fixedDelay、fixedRate理解梦见刷碗
场景描述:
四个自信在服务器上出现了⼀些不太合理数据,数据处理采⽤的是定时任务(@Scheduled中fixedDelay属性),⼀开始对fixedDelay的理解就是:上次任务执⾏完毕后,然后间隔配置的时间才会执⾏下⼀次任务。
fixedDelay多线程处理:
场景⼀:假设⾜够的线程在相隔的时间内能够处理完任务
场景⼀结果:在线程池线程数在相隔时间内⾜够执⾏任务,下⼀次任务的启动时间就是配置的间隔时间。
莴笋功效
场景⼆:在多线程环境下,如果需要处理的数据⽐较多,⼀开始的理解,就算需要处理的数据再多,那么下⼀次任务的执⾏也是在当前任务执⾏完毕后才会开始启动,然⽽并⾮如此,代码块如下所⽰:
场景⼆结果:在每⼀个任务中,线程睡眠五秒钟,得出的结果是下⼀个任务的启动还是fixedDelay配置的时间,如果上⼀次任务没有执⾏完毕,下次任务如果启动也不会执⾏对应的任务,⽽是需要等待上⼀次任务真正执⾏完毕才会执⾏。
fixedRate多线程处理:
场景⼀:如果两个任务相隔的时间⾜够长,线程能充分的处理完这些数据:邑邑
场景⼀结果:还是相隔配置的时间执⾏下⼀次任务
场景⼆:假设在相隔的时间内不能处理完任务;到了相隔的时间下⼀个任务还是会启动,但会被阻塞到上⼀个任务执⾏完毕才会执⾏当前这个任务。
种蒜日记
fixedRate单线程处理:
fixedRate代码块如下所⽰:
fixedRate结果:如果任务的处理时间⼤于fixedRate配置的时间,那么当任务结束的时候则会⽴马执⾏。如果是在相隔的时间段内处理完毕,假设设置的是5s,任务花了3s执⾏完毕,那么在2s后则会执⾏下⼀个任务。
烤米饼
fixedDelay单线程处理:男生肚子疼
fixedDelay代码块如下所⽰:
fixedDelay结果:如果设定的是相隔5s执⾏,当前任务假设需要花费8s,那么下⼀次的执⾏的时间为当前任务执⾏完毕后,相隔5s后再执⾏。
如何验证多线程任务执⾏完毕?
1、可以采⽤isTerminated()⽅法检测多线程是否执⾏完毕。
举报公司偷税漏税需要什么证据2、可以采⽤CountDownLatch的await()⽅法实现。