程序员

Java 防抖动函数的实现

作者:admin 2021-08-18 我要评论

概述 目前在开发一个文档监控类工具时遇到一个问题 希望在文档编写过程中不对文档做备份 而在文档编写结束时再备份 这就需要一个防抖函数。 防抖函数 就是指触发...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
概述

目前在开发一个文档监控类工具时遇到一个问题 希望在文档编写过程中不对文档做备份 而在文档编写结束时再备份 这就需要一个防抖函数。

防抖函数 就是指触发事件后在n 秒内函数只能执行一次 如果在n 秒内又触发了事件 则会重新计算函数执行时间。 简单的说 当一个动作连续触发 则只执行最后一次。

实现

我们可以使用ScheduledExecutorService的schedule方法实现

package net.wenzuo.util;
import java.util.concurrent.*;
 * 抖动函数
 * 以 相同 key 在 delay 时间内如果重复调用本方法将只会调用最后一次
 * author 张豪
 * since 2021/7/15 15:22
public class Debounce {
 private static final ScheduledExecutorService SCHEDULE Executors.newSingleThreadScheduledExecutor();
 private static final ConcurrentHashMap Object, Future ? DELAYED_MAP new ConcurrentHashMap ();
 public static void debounce(final Object key, final Runnable runnable, long delay, TimeUnit unit) {
 final Future ? prev DELAYED_MAP.put(key, SCHEDULE.schedule(() - {
 try {
 runnable.run();
 } finally {
 DELAYED_MAP.remove(key);
 }, delay, unit));
 if (prev ! null) {
 prev.cancel(true);
 public static void shutdown() {
 SCHEDULE.shutdownNow();
 public static void main(String[] args) {
 Debounce.debounce( 1 , () - {System.out.println(11);}, 3, TimeUnit.SECONDS);
 Debounce.debounce( 1 , () - {System.out.println(22);}, 3, TimeUnit.SECONDS);
 Debounce.debounce( 1 , () - {System.out.println(33);}, 3, TimeUnit.SECONDS);
 Debounce.debounce( 2 , () - {System.out.println(44);}, 3, TimeUnit.SECONDS);
 Debounce.debounce( 2 , () - {System.out.println(44);}, 3, TimeUnit.SECONDS);
 Debounce.debounce( 2 , () - {System.out.println(44);}, 3, TimeUnit.SECONDS);
}

本文转自网络,原文链接:https://developer.aliyun.com/article/787305

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • Java 防抖动函数的实现

    Java 防抖动函数的实现

  • 解决 Java 闭包不能访问外部变量

    解决 Java 闭包不能访问外部变量

  • 阿里云服务网格ASM助力实现零信任、强

    阿里云服务网格ASM助力实现零信任、强

  • 常用Dos命令

    常用Dos命令

腾讯云代理商
海外云服务器