java timer 销毁_java重新计时 timer

想实现一个逻辑:有一个方法A(),第一次调用等待500ms,如果在这个时间间隔内再次调用方法A(),则重新对方法A()进行计时,如果连续有多次调用方法A()且时间间隔均小于500ms,则只执行最后一个时间间隔大于500ms,也就是说只有与下一次调用超过500ms的调用才被执行。

本人才疏学浅,不知道是否java提供这样的方法,所以找起百度大神搜到的解答,有的说:sleep计算间隔,第一次睡500ms,如果第二次在第300ms内来了,再睡500-(500-300)=300ms,诶,听起来却是实现了,但是方法执行了多次,得不偿失啊,于是我构思不会连续执行多次的方式,因为在间隔小于500ms时不执行,禁止多任务

于是有了以下思路:新建一个Timer,方法A()中初始化,并让它500ms之后执行,每次调用方法A(),验证时间戳,如果时间间隔在500ms之内则把timer取消,再次调用方法A(),如果时间差大于500ms则直接滴啊用方法A(),执行任务。

模拟调用方法:

public void call() {

lastTime = System.currentTimeMillis();

final Timer timer = new Timer();

timer.schedule(new TimerTask() {

public void run() {

i++;

currentTime = System.currentTimeMillis();

if (currentTime - lastTime < 500) {

if (null != exec) {

exec.cancel();

exec();

}

} else {

exec();

}

lastTime = currentTime;

System.out.println("--调用任务--------" + System.currentTimeMillis());

if (i > 6) {

timer.cancel();

}

}

}, 600, delay);

}

执行任务方法:

public synchronized void exec() {

exec = new Timer();

exec.schedule(new TimerTask() {

public void run() {

System.out.println("---------任务执行--" + System.currentTimeMillis());

exec.cancel();

}

}, 500);

}

delay为400时:

0818b9ca8b590ca3270a3433284dd417.png

delay为600时:

0818b9ca8b590ca3270a3433284dd417.png

代码很简单,就不多介绍了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值