我有将通话限制为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/

10-09 00:28