package com.xxxx.seckill.limit;
/**
* @author WangHeng
* @version V1.0
* @date 2023/1/9- 17:18
* @desc 令牌桶算法实现
**/
public class TokenBucketLimit {
//第一次初始化系统的当前的时间
private Long timeStamp = System.currentTimeMillis();
//设置桶的容量大小为100
private Long capacity = 100L;
//令牌放入的速度(每秒系统能处理的请求数目)
private Long rate = 10L;
//当前的令牌个数
private Long tokens = 20L;
/**
* 方法限流方法
*
* @return true:代表限流 false:代表通过
*/
public synchronized Boolean limit() {
//获取当前的时间
Long now = System.currentTimeMillis();
//计算这段时间内制造的令牌桶的个数
tokens = Math.min(capacity, tokens + (now - timeStamp) / 1000 * rate);
//更新这次访问的时间
timeStamp = now;
//只要还有令牌
if (tokens < 1) {
//令牌个数--
tokens--;
return false;
}
//令牌不够了
else {
return true;
}
}
}
令牌桶限流算法实现
最新推荐文章于 2024-05-20 20:08:58 发布