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):判断是否可以在超时时间内获取相应数量的许可。

  • 相关阅读:
    centos7网络配置
    centos7安装gitlab错误解决
    数据库事务的隔离级别
    数据库事务的特性
    windows系统下安装redis扩展
    windows 7搭建基于docker的nginx, php运行环境
    php foreach 引用注意
    mysql远程连接10038
    mysql忘记root密码
    phpstorm添加sdk
  • 原文地址:https://www.cnblogs.com/fanguangdexiaoyuer/p/6253314.html
Copyright © 2011-2022 走看看