追求使你充实,成功和失败都是伴奏。——史铁生
前段时间写了java防抖,不过之前写的都是在一定时间内只执行一次,超过这个时间,防抖又失效了,假设我现在有这样一个需求:
在一定的间隔内多次调用一个函数,只有最后一次才生效
例如,我设定的间隔为1秒,那么只要我在1秒内触发了第二次,那么就重新计时
废话不多说,贴代码
| package com.ruben;
 import com.ruben.utils.TimeUtil;
 
 import java.util.Timer;
 import java.util.TimerTask;
 import java.util.logging.Handler;
 import java.util.logging.LogRecord;
 
 
 
 
 
 
 public class TimeIsExpensiveDemo {
 
 public static void main(String[] args) {
 long total = 0;
 for (int i = 1; i <= 10; i++) {
 long startTime = System.nanoTime();
 
 ruben();
 try {
 Thread.sleep(500);
 long endTime = System.nanoTime();
 total += endTime - startTime;
 System.out.println("执行了" + total / (1000.0 * 1000.0) + "ms");
 } catch (InterruptedException e) {
 e.printStackTrace();
 }
 }
 }
 
 
 
 
 public static TimerTask timerTask = new TimerTask() {
 @Override
 public void run() {
 }
 };
 
 
 
 
 public static void ruben() {
 
 timerTask.cancel();
 
 timerTask = new TimerTask() {
 public void run() {
 System.out.println("最后一次循环后才执行我");
 }
 };
 
 new Timer().schedule(timerTask, 1000);
 }
 
 }
 
 | 
执行结果
