Google RateLimiter不适用于计数器

Arn*_*tak 1 java throttling guava

我有限制调用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);
}
Run Code Online (Sandbox Code Playgroud)

但是代码没有停在100条记录上,让1秒完成.难道我做错了什么?

Dod*_*ion 5

RateLimiter工作正常.问题是您的输出是缓冲的,因为您每次都不会刷新它.通常,标准输出是行缓冲的.所以,如果你写了

System.out.println("Number of records processed = " + (i+1));
Run Code Online (Sandbox Code Playgroud)

你会看到100暂停.但是,你有什么:

System.out.print("\ r \n已处理的记录数="+ i + 1);

有两个问题.首先,"\ r"不作为新行,不会引起冲洗; 因此整个输出都被缓冲并一次性打印到控制台.其次,你需要把(i + 1)括在括号中.你将i追加到字符串,然后将1附加到结果字符串.