guava RateLimiter 使用


RateLimiter 是利用令牌桶算法

guava RateLimiter 使用

 1,阻塞例子

import com.google.common.util.concurrent.RateLimiter;

public class Client {


    public static void main(String[] args)  {
        RateLimiter limiter = RateLimiter.create(2);

        for (int i = 0; i < 10; i++) {
            limiter.acquire();
            System.out.println(System.currentTimeMillis());
        }


    }


}

从输出的时间戳可以看到每秒至多输出两条记录,起到了流量控制的效果。当使用acquire()方法时,过剩的流量调用会等待,直到有机会执行。

2,丢弃例子

import com.google.common.util.concurrent.RateLimiter;

public class Client {


    public static void main(String[] args)  {
        RateLimiter limiter = RateLimiter.create(2);

        for (int i = 0; i < 10; i++) {
            if(limiter.tryAcquire()){
                System.out.println(System.currentTimeMillis());
            }
        }


    }



}