【发布时间】:2015-12-28 18:58:02
【问题描述】:
刷新数据库中的记录。我们要么得到一个明确的刷新通知,要么每 60 秒轮询一次。每秒刷新不超过一次。
如果有请求进来,如果在一秒钟内没有发生请求,它应该排队立即刷新。否则,它应该在最后一次刷新结束后安排刷新 1 秒,除非此类任务已经安排在该时间或更早的时间。
在没有显式刷新的一分钟后,计时器应启动并刷新,以防未发送通知。
可能会有大量通知进入(每秒数百个)。
刷新可以通过一个单独的线程来完成。
什么是优雅的设计方式?
这是我所拥有的,但这可能会导致请求过多:
private NotificationCenter() {
recordFetchService = Executors.newSingleThreadScheduledExecutor();
recordFetchService.scheduleWithFixedDelay(refreshCommand, minTimeBetweenRefresh, maxTimeBetweenRefresh, TimeUnit.MILLISECONDS);
}
private void queueRefresh() {
// explicit refresh requested. Schedule a refreshCommand to fire immediately, unless that would break our contract
if (!pending.isDone() && pending.getDelay(TimeUnit.MILLISECONDS) < minTimeBetweenRefresh) {
// a refresh is already scheduled
} else {
pending = recordFetchService.schedule(refreshCommand, 0L, TimeUnit.MILLISECONDS);
}
}
【问题讨论】:
标签: java multithreading timer scheduledexecutorservice