guava RateLimiter 使用


RateLimiter 是利用令牌桶算法

 依赖

 <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>23.0</version>
        </dependency>

 

 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());
            }
        }


    }



}

 

posted @ 2020-11-25 17:32  冬马党  阅读(281)  评论(0)    收藏  举报