首页 > 编程语言 >限流-令牌桶算法

限流-令牌桶算法

时间:2024-09-14 10:51:58浏览次数:9  
标签:令牌 timeWindow maxRequests long 算法 限流 private AtomicInteger

import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * 限流器
 */
public class RateLimiter {
    /**
     * 时间窗口,单位毫秒
     */
    private final long timeWindow;
    /**
     * 窗口时间内最大请求数
     */
    private final int maxRequests;

    private final AtomicInteger requestCount = new AtomicInteger(0);

    private long startTime = System.currentTimeMillis();


    public RateLimiter(int maxRequests, long timeWindow, TimeUnit unit) {
        this.maxRequests = maxRequests;
        this.timeWindow = unit.toMillis(timeWindow);
    }


    /**
     * @return true 继续向下执行,false 阻断执行
     */
    public synchronized boolean tryAcquire() {
        long now = System.currentTimeMillis();
        if (now - startTime > timeWindow) {
            // 重置计数器
            requestCount.set(0);
            startTime = now;
        }
        if (requestCount.incrementAndGet() <= maxRequests) {
            return true;
        } else {
            return false;
        }
    }
}

标签:令牌,timeWindow,maxRequests,long,算法,限流,private,AtomicInteger
From: https://www.cnblogs.com/hhddd-1024/p/18413526

相关文章

  • AI算法部署方式对比分析:哪种方案性价比最高?
    随着人工智能技术的飞速发展,AI算法在各个领域的应用日益广泛。AI算法的部署方式直接关系到系统的性能、实时性、成本及安全性等多个方面。本文将探讨AI算法分析的三种主要部署方式:本地计算、边缘计算和云计算,并详细分析它们的优劣性。一、本地计算1)部署方式本地计算是指将AI算......
  • SHA加密算法
    SHA简介安全散列算法(英语:SecureHashAlgorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。  目前SHA有五个算法,分别是SHA-1、SHA-......
  • MD5加密算法
    MD5简介MD5算法是单向散列算法的一种。单向散列算法也称为HASH算法,是一种将任意长度的信息压缩至某一固定长度(称之为消息摘要)的函数(该压缩过程不可逆)。在MD5算法中,这个摘要是指将任意数据映射成一个128位长的摘要信息。并且其是不可逆的,即从摘要信息无法反向推演中原文,在演算过......
  • 【LeetCode 算法笔记】49. 字母异位词分组
    目录问题描述计数法:计数法(用哈希表):排序法:问题描述给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词是由重新排列源单词的所有字母得到的一个新单词。示例1:输入:strs=[“eat”,“tea”,“tan”,“ate”,“nat”......
  • 8-回溯算法
    参考代码随想录题目分类大纲如下:一、回溯算法理论基础1、什么是回溯法回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。回溯法其实就是暴力查找,并不是什么高效的算法2、回溯法的效率虽然回溯法很难,很不好理解,但是回溯法并不......
  • 代码随想录算法训练营,9月13日 | 654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索
    654.最大二叉树题目链接:654.最大二叉树文档讲解︰代码随想录(programmercarl.com)视频讲解︰最大二叉树日期:2024-09-13想法:根据昨天中后序列构造二叉树的经验,要找到数组中的最大值的位置,可以设置两个指针表示子树的范围(左闭右开)Java代码如下:classSolution{publicTreeNo......
  • 双指针算法专题(1)
    找往期文章包括但不限于本期文章中不懂的知识点:个人主页:我要学编程(ಥ_ಥ)-CSDN博客所属专栏: 优选算法专题目录双指针算法的介绍 283.移动零1089.复写零202.快乐数11.盛最多水的容器双指针算法的介绍 在正式做题之前,得先了解:什么是双指针? 双指针一般是指......
  • 【数据挖掘】分类算法
    目录一、分类算法概述二、分类算法优缺点和改进2.1 分类算法优点2.2分类算法缺点2.3 分类算法改进三、分类算法实现3.1 分类算法C语言实现3.2 分类算法JAVA实现3.3分类算法python实现四、分类算法应用五、分类算法发展趋势一、分类算法概述       ......
  • PC算法详解
    基于约束的方法(PC(Peter-Clark)算法)基于约束的方法大多数是在经验联合分布上测试条件独立性,来构造一张反映这些条件独立性的图。通常会有多个满足一组给定的条件独立性的图,所以基于约束的方法通常输出一个表示某个MEC(边缘计算)的图(例如,一个PAG)。最有名的算法是PC算法,从一......
  • 多目标优化算法求解36个多目标测试函数(ZDT1、ZDT2、ZDT3、ZDT4、ZDT6、DTLZ1-DTLZ9、W
    36个多目标测试函数(ZDT1、ZDT2、ZDT3、ZDT4、ZDT6、DTLZ1-DTLZ9、WFG1-WFG9、UF1-UF10、LSMOP1-LSMOP3)是专门为了测试和比较不同多目标优化算法的性能而设计的。下面是每个函数集的简要介绍:ZDT(Zitzler-Deb-Thiele)函数集:ZDT系列是一组经典的多目标优化测试函数,由EckartZit......