使用Guava RateLimiter限流
Posted guihong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Guava RateLimiter限流相关的知识,希望对你有一定的参考价值。
首先简单介绍下RateLimiter的使用,
public void testAcquire() {
RateLimiter limiter = RateLimiter.create(1);
for(int i = 1; i < 10; i = i + 2 ) {
double waitTime = limiter.acquire(i);
System.out.println("cutTime=" + System.currentTimeMillis() + " acq:" + i + " waitTime:" + waitTime);
}
}
输出结果:
cutTime=1535439657427 acq:1 waitTime:0.0 cutTime=1535439658431 acq:3 waitTime:0.997045 cutTime=1535439661429 acq:5 waitTime:2.993028 cutTime=1535439666426 acq:7 waitTime:4.995625 cutTime=1535439673426 acq:9 waitTime:6.999223
首先通过RateLimiter.create(1);创建一个限流器,参数代表每秒生成的令牌数,通过limiter.acquire(i);来以阻塞的方式获取令牌,当然也可以通过tryAcquire(int permits, long timeout, TimeUnit unit)来设置等待超时时间的方式获取令牌,如果超timeout为0,则代表非阻塞,获取不到立即返回。
参考:
以上是关于使用Guava RateLimiter限流的主要内容,如果未能解决你的问题,请参考以下文章
Day857.高性能限流器Guava RateLimiter -Java 并发编程实战