我试图限制每秒调用一个方法的次数。
我尝试使用Guava RateLimiter实现此目的。
RateLimiter rateLimiter = RateLimiter.create(1.0);//Max 1 call per sec
rateLimiter.acquire();
performOperation();//The method whose calls are to be throttled.
但是,调用方法不限于每秒1个,而是连续的。
节流可以使用Thread.sleep()实现,但是我希望使用Guava而不是sleep()。
我想知道使用Guava RateLimiter实现方法调用运行的正确方法。
我检查了RateLimiter的文档,并尝试使用相同的文档,但无法达到预期的效果。
最佳答案
您需要在每次调用时在相同的acquire()
上调用RateLimiter
,例如通过使其在performOperation()
中可用:
public class RateLimiterTest {
public static void main(String[] args) {
RateLimiter limiter = RateLimiter.create(1.0);
for (int i = 0; i < 10; i++) {
performOperation(limiter);
}
}
private static void performOperation(RateLimiter limiter) {
limiter.acquire();
System.out.println(new Date() + ": Beep");
}
}
结果是