1. 程式人生 > 實用技巧 >簡單的java實現滑動時間視窗限流演算法

簡單的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; } }