使用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限流的主要内容,如果未能解决你的问题,请参考以下文章

Guava RateLimiter限流问题

使用Guava RateLimiter限流

Guava的RateLimiter实现接口限流

Day857.高性能限流器Guava RateLimiter -Java 并发编程实战

Day857.高性能限流器Guava RateLimiter -Java 并发编程实战

使用Guava RateLimiter限流以及源码解析