简单的java实现滑动时间窗口限流算法

在网上搜滑动时间窗口限流算法,大多都太复杂了,本人实现了个简单的,原理稍后再补充,先上代码

    public static void main(String[] args) throws InterruptedException {
        List<Long> list = new ArrayList<>();
        while (true) {
            System.out.println(new Date().toString() + isGo(list, 2, 1000 * 10));
            Thread.sleep(1000 * new Random().nextInt(10));
        }
    }

    /**
     * 滑动时间窗口限流算法
     * 在指定时间窗口,指定限制次数内,是否允许通过
     *
     * @param list 队列
     * @param count 限制次数
     * @param timeWindow 时间窗大小
     * @return 是否允许通过
     */
    public static boolean isGo(List<Long> list, int count, long timeWindow) {
        long nowTime = System.currentTimeMillis();
        if (list.size() < count) {
            list.add(0, nowTime);
            return true;
        }

        Long farTime = list.get(count - 1);
        if (nowTime - farTime > timeWindow) {
            list.remove(count - 1);
            list.add(0, nowTime);
            return true;
        } else {
            return false;
        }
    }

 

上一篇:GO Time 类型方法处理集合


下一篇:小鼎量化机器人系统开放方案