我有将通话限制为100 / s的情况。
我正在考虑使用Google Guava RateLimiter。我像这样测试它:
int cps = 100;
RateLimiter limiter = RateLimiter.create(cps);
for(int i=0;i<200;i++) {
limiter.acquire();
System.out.print("\rNumber of records processed = " + i+1);
}
但是代码并没有停止在100条记录上,以使1秒完成。难道我做错了什么?
最佳答案
RateLimiter工作正常。问题是您的输出被缓冲了,因为您没有每次都刷新它。通常,标准输出是行缓冲的。所以如果你写过
System.out.println("Number of records processed = " + (i+1));
您会看到停顿在100。但是,您有:
System.out.print(“ \ r已处理的记录数=” + i + 1);
有两个问题。首先,“ \ r”不被当作新行,并且不会引起刷新;因此,整个输出将被缓冲并一次性打印到控制台。其次,您需要将(i + 1)放在括号中。您所拥有的将i附加到字符串,然后将1附加到结果字符串。
关于java - Google RateLimiter不适用于计数器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46845352/