码迷,mamicode.com
首页 > 编程语言 > 详细

java限流工具类

时间:2019-01-04 21:20:58      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:orm   view   结果   ash   mat   main   cto   comm   get   


代码


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限流工具类

标签:orm   view   结果   ash   mat   main   cto   comm   get   

原文地址:https://www.cnblogs.com/datiangou/p/10222240.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!