java限流工具类
代码
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高并发系列 - 第15天:JUC中的Semaphore,最简单的限流工具类,必备技能
		
这是java高并发系列第15篇文章 Semaphore(信号量)为多线程协作提供了更为强大的控制方法,前面的文章中我们学了synchronized和重入锁ReentrantLock,这2种锁一次都只能 ...
 - Java常用工具类之IO流工具类
		
package com.wazn.learn.util; import java.io.Closeable; import java.io.IOException; /** * IO流工具类 * * ...
 - java文件处理工具类
		
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedRead ...
 - Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类
		
Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...
 - Guava限流工具RateLimiter使用
		
公司最近在推一个限流工具接入,提供的功能有单机限流.集群限流等.想了解一下限流的原理和设计,看了一下wiki里面有提到用了guava的ratelimiter工具,查了一些资料了解了一下 主要的限流算法 ...
 - java下载文件工具类
		
java下载文件工具类 package com.skjd.util; import java.io.BufferedInputStream; import java.io.BufferedOutput ...
 - HttpTool.java(在java tool util工具类中已存在) 暂保留
		
HttpTool.java 该类为java源生态的http 请求工具,不依赖第三方jar包 ,即插即用. package kingtool; import java.io.BufferedReader ...
 - java格式处理工具类
		
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...
 - Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类
		
Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类 =========================== ©Copyright 蕃薯耀 2017年9月25日 http://www ...
 
随机推荐
- 「Luogu P5602」小E与美食
			
题目链接 戳我 \(Solution\) 这道题只需要枚举吃\(k\)个美食,最后在取前\(k\)大的美味值.对于每个算出答案后取\(max\) \(Code\) #include<bits/s ...
 - 09.变态跳台阶 Java
			
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 思路 0:0 1:(1) 2:(1,1)(2) 3:(1,1,1)(2,1)( ...
 - (十七)C语言之变量
 - 苹果用户转入mate30,被恶心到了
			
几年没更新博客了,今天入了新坑,一堆东西想吐槽,发一篇喷一波. 几千块的机器,牛皮癣广告居然这么鬼多,预装一打,推荐一打,不比千元机少,这TM是旗舰机啊.华为官方产的 app打着服务旗号,不给权限强退 ...
 - Linux常用指令grep(搜索过滤)
			
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...
 - FastAdmin 在 CRUD 时出现 exec() has been disabled for security reasons 处理方法
			
然后在看看 禁用函数列表(php.ini)disable_functions = proc_open, popen, exec, system, shell_exec, passthru 这里要把 e ...
 - spark streaming 5: InputDStream
			
InputDStream的继承关系.他们都是使用InputDStream这个抽象类的接口进行操作的.特别注意ReceiverInputDStream这个类,大部分时候我们使用的是它作为扩展的基类,因为 ...
 - 关于web技术的一些见解
			
在目前的软件技术领域中,互联网方面的技术是其中最热门的一部分.现在做一个普通的网站,就涉及到大部分的web技术了:前端展示,后端数据处理,功能模块等.我觉得,也就分两个部分的技术:前端,后端. 前端, ...
 - Java连接Sap系统调并调用RFC函数
			
参考博客:https://blog.csdn.net/qq_36026747/article/details/81287462 https://www.cnblog ...
 - dbgrid中移动焦点到指定的行和列
			
dbgrid是从TCustomGrid继承下来的,它有col与row属性,只不过是protected的,不能直接访问,要处理一下,可以这样:TDrawGrid(dbgrid1).row:=row;TD ...