-2
A
回答
3
的问题是相当普遍的,所以一些一般性的建议:
- 使用时间戳的事件发生时的
TreeSet<Long>
; - 在每个事件发生时,将其时间戳添加到该集并移除所有过期的条目(比时间早);
- 当设置的大小超过阈值时反应。
对于2.使用tailSet
方法来快速消除过期的时间戳。
这是该方法的一个简单的例子:
public class OverloadGuard {
private SortedSet<Long> timestamps = new TreeSet<>();
private final long timeout = TimeUnit.MINUTES.toMillis(5);
private final int threshold = 10;
public synchronized void event() {
final long now = System.currentTimeMillis();
timestamps = timestamps.tailSet(now - timeout);
timestamps.add(now);
if (timestamps.size() > threshold) throw new OverloadException();
}
}
class OverloadException extends RuntimeException { }
0
由于你上面的例子示出了事件的相当低的速率(10个事件在5分钟内),我想创建X的队列中的时间戳。
- 流行从队列如果是满
- 推到队列中的当前时间戳
- 如果堆栈已满,并且第x时间戳与第一时间戳之间的差为:到达每个新的消息在给定的时间间隔内发出警报!
相关问题
- 1. windows phone中的GeoCoordinateWatcher在给定的时间间隔内不触发事件
- 2. SQL查询在给定的时间间隔内分割数字
- 3. 按发生次数分组的时间间隔
- 4. 查询在给定时间发生事件的频率
- 5. 以正确的时间间隔不发生事件c#定时器
- 6. Cronjob在给定的时间间隔
- 7. 如何在间隔时间内刷新鼠标事件参数?
- 8. 给定时间间隔内的聚合函数spark
- 9. 给定时间间隔内的聚合函数
- 10. X:以固定的时间间隔触发事件
- 11. 随机的Cplex数发生器用一定的时间间隔
- 12. T-SQL查询每给定的时间间隔计算正在发生的事件
- 13. 如何在给定的时间间隔内调用.post()?
- 14. 在给定的时间间隔内重新启动html5动画
- 15. 在给定的时间间隔内选择年/月格式
- 16. iOS在一次给定时间允许一次触摸事件
- 17. Quartz.NET触发器:在指定的时间间隔内运行一次
- 18. 在很短的时间间隔内多次调用函数
- 19. 在特定的时间间隔自动生成发票 - Rails
- 20. 设置事件发生在一定时间之间
- 21. 在给定时间内分隔小时数
- 22. $发生太多次的间隔
- 23. asp.net触发事件在服务器上的时间间隔
- 24. 如何检查时间(分钟/秒)是否在给定的时间间隔内?
- 25. 如何检查时间是否在给定的时间间隔范围内
- 26. 在给定日期时间内添加30秒间隔
- 27. 查找时间在一定的时间范围内的发生次数和持续时间
- 28. 计数时间间隔内的观察次数
- 29. 归结事件的时间间隔
- 30. 在给定的时间间隔后删除子文件夹
让我举个例子。如果在5分钟的时间间隔内发生10次事件,我想停止收到消息。 – user1703787