编写一个不能过于频繁调用的方法的正确方法是什么?

Pau*_*gel 4 java

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

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

The*_*111 5

使用番石榴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!");
    }
  }
}
Run Code Online (Sandbox Code Playgroud)