zoukankan      html  css  js  c++  java
  • guava学习--ratelimiter

    RateLimiter类似于JDK的信号量Semphore,他用来限制对资源并发访问的线程数。

    RateLimiter limiter = RateLimiter.create(4.0); //每秒不超过4个任务被提交
    limiter.acquire();  //请求RateLimiter, 超过permits会被阻塞
    executor.submit(runnable); //提交任务


    也可以以非阻塞的形式来使用:
    If(limiter.tryAcquire()){ //未请求到limiter则立即返回false
        doSomething();
    }else{
        doSomethingElse();
    }

    tryAcquire方法有另外重载的方法,我们可以设置特定的超时时间。

        create(double permitsPerSecond):创建具有指定稳定吞吐量的RateLimiter类,传入允许每秒提交的任务数量。

        create(double permitsPerSecond, long warmupPeriod, TimeUnit unit):创建具有指定稳定吞吐量的RateLimiter类,传入允许每秒提交的任务数量和准备阶段的时间,在这段时间RateLimiter会有个缓冲,直到达到它的最大速率(只要有饱和的足够的请求)。

        setRate(double permitsPerSecond):稳定的更新RateLimiter的速率,RateLimiter的构造方法中中设置permitsPerSecond参数,调用这个方法后,当前阻塞的线程不会被唤醒,因此它们不会观察到新的速率被设置。

        getRate():返回RateLimiter被设置的稳定的速率值。

        acquire():从这个ratelimiter获得一个许可,阻塞线程直到请求可以再授予许可。

        acquire(int permits):获取传入数量的许可,阻塞线程直到请求可以再授予许可。

        tryAcquire(long timeout, TimeUnit unit):判断是否可以在指定的时间内从ratelimiter获得一个许可,或者在超时期间内未获得许可的话,立即返回false。

        tryAcquire(int permits):判断是否可以立即获取相应数量的许可。

        tryAcquire():判断是否可以立即获取许可。

        tryAcquire(int permits, long timeout, TimeUnit unit):判断是否可以在超时时间内获取相应数量的许可。

  • 相关阅读:
    DotNet的JSON序列化与反序列化
    DotNet指定文件显示的尺寸
    将文本文件的内容存储在DataSet中的方法总结
    Apple的LZF算法解析
    DotNet常用排序算法总结
    C#创建安全的字典(Dictionary)存储结构
    C#创建安全的栈(Stack)存储结构
    转化代码:添加在您网页中用户触发转化行为之后的地方。添加方法
    nginx配置ThinkPHP5二级目录访问
    好久没写原生的PHP调用数据库代码了分享个
  • 原文地址:https://www.cnblogs.com/fanguangdexiaoyuer/p/6253314.html
Copyright © 2011-2022 走看看