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

  • 相关阅读:
    使用 Jbulider 开发 J2ME 移动游戏程序
    JDBC的数据库事务
    oracle 常用命令大汇总
    Oracle数据库几种启动方式
    分析Oracle数据库日志文件(1)
    SugarCRM 去掉 header 应用程序 下拉菜单
    SugarCRM 去掉左边快捷保存菜单
    SugarCRM 指定模块显示左边快捷方式
    SugarCRM 左边菜单全部去掉
    SugarCRM 去掉header头部的查找功能
  • 原文地址:https://www.cnblogs.com/fanguangdexiaoyuer/p/6253314.html
Copyright © 2020-2023  润新知