首页 > 编程知识 正文

延时函数delay用法,延时函数delay怎么算

时间:2023-05-05 20:48:43 阅读:25135 作者:1747

使用场景:在物联网APP应用中,硬件的版本升级。 在线操作要求在某个时间点升级某种类型的设备。

因此,必须创建升级任务,包括需要升级的设备信息、升级包和升级时间点等信息。 根据后台升级工作,按时升级设备。

实现方法1 :动态定时任务。

每次创建或更改升级时间时,都必须对升级时间进行排序,创建最小时间的计划任务,并取消以前未运行的计划任务。 完成任务后,请在以下时间点创建计划任务:

(相对复杂,每次添加或创建升级时间时都需要重新排序、创建或取消计划任务。 此外,如果更改时间短于当前时间间隔,则可能发生。 创建计划任务后,任务的执行时间将过去,计划任务将不再运行。)

方法2 :

使用延迟队列DelayQueue实现。 每次创建或修改升级时间时,都会将元素添加到队列中并计算延迟时间。 元素必须包含任务id和版本。 确定任务时间是否已更改,并确保设备升级时间点准确无误。

(不需要自己排序,计算延迟时间即可) )。

考虑情况:集群部署(分布式锁定,可通过redis实现)、服务锁定)、项目需要重新启动,未运行的任务需要重新排队)、任务执行中断)以及一些设备更新。

package com.rsh.demo.delayq; 导入Java.util.concurrent.delay queue; import Java.util.concurrent.delayed; import Java.util.concurrent.time unit; publicclassmydelayimplementsdelayed//延迟时间,单位自定义专用长延迟时间; 私有字符串名称; publicmydelay (长延迟时间,字符串名称) {this.name=name; //例如,s this.delay time=delay time * 1000 system.current time millis (; }public MyDelay () {}public long getDelayTime ) ) {return this.delayTime; }public String getName () {return this.name; } @ overridepublicintcompareto (delayedo ) return ) int ) this.delaytime-) ) mydelay ) o ).getDelayTime ) ); //unit.convert @ overridepubliclonggetdelay (time unit ) (returnunit.convert ) ) (this.delay time-system.delay time ) publicstaticvoidmain (字符串[ ] args ) throwsinterruptedexception (delayqueuemydelaydelayqueue=newdelayqueue ); 我的延迟延迟; 长延迟时间; for(intI=0; i 10; I ) delaytime=(long ) (Math.random ) ) * 100L ); system.out.println (延迟时间; delay=newmydelay (延迟时间,延迟时间' '; delayqueue.put(delay; }for(intI=0; i 10; I ) ) {delay=delayQueue.take ); system.err.println (' name=' delay.getname ) ); } }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。