import com.google.common.util.concurrent.RateLimiter;
public class RateLimitTest {
static RateLimiter r = RateLimiter.create(5.0);
public static void main(String[] args) {
for(int i=0;i<10;i++)
{
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+":"+r.tryAcquire());
}
}).start();
}
}
}
運行結果:
Thread-1:true
Thread-4:false
Thread-3:false
Thread-6:false
Thread-5:false
Thread-9:false
Thread-8:false
Thread-7:false
Thread-10:false
Thread-2:false
不知道為什么令牌桶設定的初始大小是5,但是執行的執行緒結果來看的話,只有一個執行緒能夠拿到許可,請高手幫忙看下什么原因
uj5u.com熱心網友回復:
概率問題吧設定5,是表示每秒允許5次,估計你的回圈太快了,超過了每秒5次的頻率(雖然是請求的10次,但是頻率太快),所以其它執行緒可能拿不到令牌
uj5u.com熱心網友回復:
public void run() {System.out.println(Thread.currentThread().getName()+":"+r.tryAcquire());
}
你這個里面加個休眠多少秒
uj5u.com熱心網友回復:
但是tryAcquire()方法里面是執行緒安全的,不應該啊
uj5u.com熱心網友回復:
加睡眠時間,看一下結果吧轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/263991.html
標籤:Java相關
上一篇:assert str!= null; 和 if (!StringUtils.isEmpty(str)) {} 有什么區別
下一篇:正在試驗.不要列印就是錯!
