当前位置: 首页 > 面试题库 >

多次调用同一方法时取消方法调用

督飞羽
2023-03-14
问题内容

我想我在这里描述的可能有个名字,但我不知道。所以我的第一个问题是要知道这种技术的名称。

这是一个示例:假设您正在网页上实现实时搜索。每次用户在搜索框中键入内容时,您都会触发一个新的搜索查询,并且结果会尽可能频繁地更新。这是一件愚蠢的事情,因为您发送的查询会超出实际需要。每2-3个字母发送一次请求,或者每100
ms最多发送一次请求就足够了。

因此,一种技术是安排在键入键之后立即执行的查询,如果仍然有计划但尚未执行的查询,则由于现在已过时而将其取消。

现在更具体地说,是否存在用于解决Java中此问题的特定模式或库?

我必须在Swing应用程序中解决问题,并且使用了ExecutorService,该服务返回了可以取消的ScheduledFutures。问题是我必须为每个要“缓冲”的方法调用手动创建一个Runnable,并跟踪每个Future来取消它。

我确定我不是第一个实现这样的事情的人,因此在某处必须有可重用的解决方案?在Spring中可能带有注释和代理的东西?


问题答案:

在给出其他答案之后,经过一番搜索,似乎确实没有一个图书馆可以满足我的要求。

我创建了一个并将其放在GitHub上。这个问题的未来读者可能会发现它很有趣。

https://github.com/ThomasGirard/JDebounce

我认为它还不是很好,但是至少它可以工作并且可以声明地使用:

@Debounce(delayMilliseconds = 100)
public void debouncedMethod(int callID, DebounceTest callback) { }


 类似资料:
  • 我遇到了一个奇怪的问题。对于单个HTTP请求,我的servlet的doGet方法被多次调用。每隔10-12秒重新运行一次,直到初始过程完成。 下面是我的servlet代码 下面是web.xml中的映射 我使用的是SEAM和JSF,但这是一个独立的servlet。日志中也没有例外。我还验证了INIT方法只被调用一次。重复的是服务方法。所有重新运行的标识哈希代码都是相同的(System.Identit

  • 我在使用Java方法时遇到了麻烦。这段代码应该有三种方法。方法1)输入员工人数。方法2)输入每个员工缺勤天数。方法3)计算缺勤天数的平均值。然后,在Main中,应该打印员工人数、缺勤天数和平均缺勤天数。显然,我不明白方法是如何工作的,因为当我运行代码时,用户在提供员工人数、缺勤天数和平均缺勤天数之前,会被询问4倍的员工人数和2倍的员工缺勤天数。如何更改代码,以便用户只需输入一次信息?

  • 我是胡克斯的新手,遇到了一些让我追自己尾巴的案例。 希望有人能解释或提供对我有意义的解决方案: > 下面这个线程:如何调用加载函数与反应使用效果只有一次 我试着在没有依赖性的情况下使用useEffect,eslint不喜欢这样,他们建议添加一个“跳过下一行”,这似乎有点骇人:

  • 问题内容: 我正在使用带有GlassFish 3.0的JSF 2.0。 我有以下托管豆: 从 overview.xhtml 文件中,我从OverviewController中调用不同的属性或方法。 一切正常,但问题出在日志文件上: 如您所见,init()方法在同一请求中被两次调用,无缘无故。据我所知,每个带有 PostConstruct 注释的方法都会被调用一次。我错了吗? 编辑: 页面上未使用A

  • 问题内容: 是否有一种方法可以使每次调用方法时都会被调用的“超级方法”,即使对于未定义的方法也是如此?有点像这样: 编辑- 细节:我有一个库,该库进行了很多更新,并且每次更新都变得晦涩难懂。为了简化我的工作流程,我正在使程序自动更新库(需要执行我想做的事情,我不会具体说明原因,但是我的程序可以与将来的更新一起使用)并且我有混淆映射与库一起下载时,我想制作一种例如称为的代理,然后在我调用它时,将获得

  • 问题内容: 我想得到调用方法。 不是 方法的名称。 这是一个如何获取调用方类的示例。 仅用于测试目的! 问题答案: 如果仅用于测试,则可能有效。它假定可以通过调用类的类访问类文件,并且类文件已使用调试符号进行编译(我希望它们用于测试!)。此代码依赖于ASM字节码库。