首页 > 编程语言 >java请求频次控制

java请求频次控制

时间:2024-11-15 14:07:15浏览次数:1  
标签:java 请求 int sum maxRequests period private 频次 long

1、添加工具类

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 频次调用控制类
 */
public class RateLimiterUtil {
    private final AtomicInteger sum;
    private final int maxRequests;
    private long period = 1000; // 1秒
    private long lastTime = System.currentTimeMillis();

    /**
     * 构造函数,初始化最大请求速率和周期
     * @param maxRequests 单位周期内可接受的最大调用次数
     * @param period 默认1秒
     */
    public RateLimiterUtil(int maxRequests, Long period)  {
        this.maxRequests = maxRequests;
        this.period=period;
        this.sum = new AtomicInteger(maxRequests);
    }

    /**
     * 获取许可,如果超过最大速率则等待
     * @throws InterruptedException
     */
    public void acquire() throws InterruptedException {
        long currentTime = System.currentTimeMillis();
        long elapsed = currentTime - lastTime;
        if (elapsed >= period) {
            lastTime = currentTime;
            sum.set(maxRequests);
        }
        int i = sum.decrementAndGet();
        if(i<=0){
            Thread.sleep(period);
        }
    }

    public static void main(String[] args) {
        RateLimiterUtil rateLimiter = new RateLimiterUtil(10,1000l);

        for (int i = 0; i < 1000; i++) {
            try {
                rateLimiter.acquire();
                // 模拟发送HTTP请求
                System.out.println("Sending HTTP request: " + System.currentTimeMillis());
            } catch (InterruptedException e) {
                Thread.currentThread().interrupt();
                System.out.println("Thread interrupted: " + e.getMessage());
            }
        }
    }
}

 

标签:java,请求,int,sum,maxRequests,period,private,频次,long
From: https://www.cnblogs.com/raorao1994/p/18547885

相关文章

  • 2024 年 Java 面试最全攻略:程序员求职跳槽必刷题目 1000+,横扫一切技术盲点!
    写在前面马上又要到收割Offer的季节,你准备好了吗?曾经的我,横扫各个大厂的Offer。还是那句话:进大厂临时抱佛脚是肯定不行的,一定要注重平时的总结和积累,多思考,多积累,多总结,多复盘,将工作经历真正转化为自己的工作经验。面经分享今天给大家分享一个面试大厂的完整面经,小伙......
  • 如何准备Java面试?
    今年招聘高峰期已过,不知道大家都找到工作没有。反正我最近是收到很多粉丝的私信说自己投了简历却杳无音信,在第一关就败下阵来。言归正传出现这一情况要么就是你的简历没有修饰好,要么就是你简历上掌握的技术栈还不足以满足你投的岗位的需求,当然后者是需要平时积累。一般像我们......
  • 基于Java的医院病历管理系统
    医院病历管理系统一:基本介绍开发环境功能模块图系统功能部分数据库表设计二:部分系统页面展示登录页面管理员首页管理员对病人信息管理界面管理员对医生信息管理界面管理员对科室信息管理界面管理员对住院信息管理界面医生管理自己的病人信息界面医生管理病人住院信息界......
  • 基于Java的社区物业管理系统
    社区物业管理系统一:基本介绍开发环境功能模块图系统功能系统功能分析部分数据库表设计系统总体E-R图二:部分系统页面展示登录页面用户车位管理界面用户租住信息管理界面用户收费信息管理界面用户房产信息管理界面管理员用户管理界面管理员收费类型管理界面管理员收费信息......
  • HTTP协议详解:发展、请求方法与安全
    前言第一次写文章比较生疏,思路也很局限,除了课件之外添加内容有限,但也以此督促学习,争取日更。学习视频来自B站up主“泷羽sec”有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec......
  • JavaScript介绍与使用
    1.认识jsjs全称(javascript):是网页上面的一个脚本语言运行执行代码逻辑从而达到我们需要的效果2.JavaScript组成核心语法-ECMAScript:规范了JS的基本语法Es是js的语法规范管理者js是Es的实现操作者DOM=>文档对象提供js操作BOM=>浏览器模型对象提供......
  • cursor是什么,怎么用cursor写Java项目
    在Java中,Cursor通常指的是与数据库操作相关的游标,用于在执行SQL查询后遍历结果集。以下是关于Cursor的详细介绍以及在Java项目中使用它的一般步骤:什么是Cursor在数据库操作中,当执行一条查询语句时,数据库会返回一个结果集。Cursor(游标)就是用于在这个结果集中逐行移动......
  • Java 常用加密解密算法
    Java常用加密解密算法 概要  加密算法是一种用数学方法对数据进行变换的技术,目的是保护数据的安全,防止被未经授权的人读取或修改。加密算法可以分为三大类:对称加密算法、非对称加密算法和哈希算法(也叫摘要算法)。  本文来梳理下开发中常用到的数据编码中的Base64以及常......
  • Java 网络编程----初探Servlet
    JaveWeb是java面向web开发的相关技术,他是相关技术的统称,并不是指某一个单一的技术。在我之前的博客中(Java网络编程----通过实现简易聊天工具来聊聊BIO模型https://www.cnblogs.com/jilodream/p/17405923.htm),就已经写到过java可以作为一个服务器(如TCP/UDP),接收外部的请求。如使用T......
  • 【开发】若页面一次性接口请求上百个,阁下又当如何应对
    需求:假如页面一次性请求有上百个,你应该如何处理这种请求并发?答:soeasy!循环请求?肯定是不对的,否则一次性并发上百次请求,差点的服务器得崩溃了,我甚至一度以为你是在搞Dos攻击。我们可以通过任务队列的缓存来合理控制并发数据。我们知道浏览器发起的请求最大并发数量一般都是6~8......