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秒完成.难道我做错了什么?
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附加到结果字符串.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           171 次  |  
        
|   最近记录:  |