java - 编写不能太频繁调用的方法的正确方法是什么?

标签 java

假设我有一个类,我不想每五秒调用一次以上的方法(例如,它查询一个网络服务器,该服务器将过于频繁发送查询的应用程序列入黑名单)。实现这个的最佳方法是什么?

我想到的解决方案是让方法在每次运行时通过调用 System.currentTimeMillis() 将时间戳存储在静态成员变量中,并在之前检查此时间戳执行时间敏感代码。但我很紧张,有些意外情况我没有预见到,所以我想看看是否有标准的方法来处理这个问题。

最佳答案

使用 Guava RateLimiter .简单示例:

public static void main(String[] args) {
  callForeverWithRateLimited();
}

public static void callForeverWithRateLimited() {
  RateLimiter rateLimiter = RateLimiter.create(1); // 1 QPS (query per second)
  while (true) {
    if (rateLimiter.tryAcquire()) {
      System.out.println("my rate was limited!");
    }
  }
}

关于java - 编写不能太频繁调用的方法的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25594571/

相关文章:

java - Spring:java.lang.NoClassDefFoundError:无法初始化类

java - naver pinpoint 不显示后台线程?

java - 如何将托管bean(非静态)注入(inject)静态方法?

java - 使用 SQL Server 方言将 Hibernate 配置为转义 LIKE 子句中的下划线

Java Spring - RowMapper ResultSet - 整数/空值

java csv多数据解析

java - 如何通过CSS显示上传的图片

java - Java 8 流中没有索引的原因是什么?

java - Hql join 和 group by 问题

java - 泛型类中的泛型静态方法