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):判斷是否可以在超時時間內獲取相應數量的許可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM