假设我有一个类,我不想每五秒调用一次以上的方法(例如,它查询一个网络服务器,该服务器将过于频繁发送查询的应用程序列入黑名单)。实现这个的最佳方法是什么?
我想到的解决方案是让方法在每次运行时通过调用 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/