我正在编写一个必须触发一些下游更新过程的事件处理程序,目前通过将一个
Runnable
实例放入一个ExecutorService
(execute
)来完成。
挑战是:事件可能在一小时内发生一次(这很好),但也可能在几秒钟内发生 100 次。
如果事件发生,必须调用下游流程之后以保持数据结构最新。所以说“(现在()-previousEventTime)< threshold ==>不要这样做”不是一个选择。因为最近的事件可能已经改变了一切,虽然它只比上一个晚了2秒。
但另一方面,在事件发生后,将下游流程延迟几秒钟(例如 10-30 秒)并不是什么大事。
我在想这样的伪代码:
private void onEvent() {
if( isRunnableAlreadyPendingToBeExecuted() ) return;
executeDeferred( updateProcessRunnable, 10, TimeUnit.SECONDS );
}
请看这个事件序列的例子:
如何在没有第三方库的情况下用纯 Java(最多 17 个)实现?