zoukankan      html  css  js  c++  java
  • 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
    
    
  • 相关阅读:
    Webservice学习之新建一个最简单的Webservice项目
    初学程序一定要养成良好的习惯
    你晚上睡好了吗?
    如何面对失恋?
    多病之秋少言多饮
    转:避开秋季相冲食物
    转:饭后九不要包你保健康
    转:五官不适预示五脏衰弱
    转:过度疲劳的27个信号与预防方法
    foxmail是不是不行了?
  • 原文地址:https://www.cnblogs.com/datiangou/p/10222240.html
Copyright © 2011-2022 走看看