代码

import com.google.common.util.concurrent.RateLimiter;

import java.util.concurrent.ConcurrentHashMap;

/**

* 限流工具类

* @author ZhangShuzheng

* @date 2018/8/13

*/

public class RateLimiterManager {

private static ConcurrentHashMap<String, RateLimiter> manager = new ConcurrentHashMap<>();

/**

* 限流

* @param key 限流key

* @param qps 频率:每秒返回锁次数

*/

public static void getLock(String key, int qps) {

ConcurrentHashMap.KeySetView<String, RateLimiter> keys = manager.keySet();

if (keys.contains(key)) {

RateLimiter rateLimiter = manager.get(key);

rateLimiter.acquire();

} else {

manager.put(key, RateLimiter.create(qps));

}

}

}

使用示例

public static void main(String[] args) {

int count = 100;

ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()

.setNameFormat("demo-pool-%d").build();

ExecutorService threadPoolExecutor = new ThreadPoolExecutor(5, 200,

0L, TimeUnit.MILLISECONDS,

new LinkedBlockingQueue<>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());

threadPoolExecutor.execute(() -> {

for (int i = 0; i < count; i++) {

RateLimiterManager.getLock("key1", 10);

System.out.println("111111111111111111111111");

}

});

threadPoolExecutor.execute(() -> {

for (int i = 0; i < count; i++) {

RateLimiterManager.getLock("key2", 1);

System.out.println("222222222222222222222222");

}

});

}

输出结果

222222222222222222222222

111111111111111111111111

111111111111111111111111

111111111111111111111111

111111111111111111111111

111111111111111111111111

111111111111111111111111

111111111111111111111111

111111111111111111111111

111111111111111111111111

222222222222222222222222

111111111111111111111111

111111111111111111111111

111111111111111111111111

111111111111111111111111

111111111111111111111111

111111111111111111111111

111111111111111111111111

111111111111111111111111

java每秒限流_java限流工具类相关推荐

  1. java获取excle表格对象_Java使用excel工具类导出对象功能示例

    本文实例讲述了Java使用excel工具类导出对象功能.分享给大家供大家参考,具体如下: package com.gcloud.common; import org.apache.poi.ss.use ...

  2. java unicode转韩文_Java 使用hutool工具类代替commons-text进行Json 中文 Unicode转换

    可选的工具 中文转换Unicode,目前有两种方式,自写工具类或引入第三方包,这里我推荐引入三方包,因为使用mvn配置非常简单,网上搜到的大多数都是自己写的工具类,试了一个,效果不是很好,因为把ASC ...

  3. Java基础巩固(二)异常,多线程,线程池,IO流,Properties集合,IO工具类,字符流,对象流,Stream,Lambda表达式

    一.异常,多线程 学习目标 : 异常的概述 异常的分类 异常的处理方式 自定义异常 多线程入门 1 异常的概述 1.1 什么是异常? 异常就是程序出现了不正常情况 , 程序在执行过程中 , 数据导致程 ...

  4. java中bitconverter_【Java】BitConverter(数字转字节数组工具类)

    import java.nio.ByteOrder; import java.nio.charset.Charset; /** * 数字转字节数组工具类 */ public class BitConv ...

  5. java 自定义json解析注解 复杂json解析 工具类

    java 自定义json解析注解 复杂json解析 工具类 目录 java 自定义json解析注解 复杂json解析 工具类 1.背景 2.需求-各式各样的json 一.一星难度json[json对象 ...

  6. java sm3国密算法加密、验证工具类

    java sm3国密算法加密.验证工具类 说明 maven依赖 完整代码 测试 说明 由于本人并不专于算法和密码学,所以如果发现工具类存在问题或者可优化地方,欢迎评论处提出. 工具类也可以直接使用封装 ...

  7. Java操作百万数据量Excel导入导出工具类(程序代码教程)

    Java操作百万数据量Excel导入导出工具类(程序代码教程): # 功能实现1.自定义导入数据格式,支持配置时间.小数点类型(支持单/多sheet)(2种方式:本地文件路径导入(只支持xls.xls ...

  8. Java 切割身份证地址,省市区 详细地址工具类

    工具类①: AddressAnalysisUtil.java import org.apache.commons.lang3.StringUtils; import java.util.Arrays; ...

  9. java中使用jxl导出excel表格的工具类(全网唯一亲测可用,在原来基础上扩展)

    java中后台导出excel的话,有两种方案,一是使用poi(不过由于是windows版本的,存在不兼容,但功能更多,更强大),而是使用jxl(纯java编写,不过兼容,简单一些),可以设置输出的ex ...

最新文章

  1. Kibana:分析及可视化日志文件
  2. 【转载】闲话操作系统(二)
  3. 【7.19 graphshortestpath graphallshortestpaths函数】matlab 求最短路径函数总结
  4. vbs获取程序窗体句柄_[VBA][高阶应用][类模块]自绘窗体进度条类cProgressBar.cls
  5. 制作系统盘,重装新系统。
  6. win8计算机丢失xinput1+3.dll,xinput1 3.dll丢失怎么办 win8下xinput1 3.dll丢失解决方法
  7. 火柴 UVa11375
  8. linux ps ax tl,Linux常用指令 - osc_wa6fkyf0的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. python打印日历代码_带tkinter的日历(打印所选日期)
  10. Moon一个无视Linq,无视实体类的设计思路.(不要错过,看了之后, 让我们从此以后不再羡慕linq to entiy!)...
  11. Java实现俄罗斯方块小游戏。(附完整源代码)
  12. MATLABr2006a序列号
  13. xpos兼容android最高版本,[原创]学习篇-xposed框架及高版本替代方案
  14. WIN10 激活系统
  15. 天津大学关于博士、硕士学位论文格式
  16. Python编写中国象棋棋盘(可视化页面)
  17. 改善网站安全性的5种方法
  18. c语言程序设计青岛职业技术学院,2020年知道C语言程序设计(青岛职业技术学院)答案公众号...
  19. JVM内存与垃圾回收篇——直接内存
  20. NumPy学习笔记(五)—— choice()函数

热门文章

  1. Synchronize对象锁异步
  2. Java多线程两种实现方式的对比
  3. 计算机组成原理sop,MacBERT:MLM as correction BERT
  4. 32M内存 跑linux内核,32位Linux单进程4G内存限制
  5. 盘点 12 个 GitHub 上的高仿项目
  6. 2020 年腾讯新增 20 亿行代码,鹅厂第一编程语言还是它
  7. python弹出警告框_selenium+webdriver+python 中警告框的处理方法
  8. oracle 错误: ORA-12899:始终提示字段太大
  9. 设计模式之单例设计模式(饿汉式)
  10. Java连接FTP服务器并且实现对其文件的上传和下载