如果发生特定事件,我有一个用例来停止进程' X'在给定的时间间隔内的时间。
java spring框架中是否有一个机制来处理这个问题?
答案 0 :(得分: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 { }
答案 1 :(得分:0)
由于上面的示例显示了相当低的事件率(5分钟内有10个事件),因此我将创建一个X时间戳队列。到达的每条新消息: