我有一个方法,我需要确保在每个输入的时间范围内只运行一次。例如,方法是;
void performAction(String input);
当前实现阻止任何输入的x秒方法;
int timeOut = 0;
void performAction(String input) {
if (hasBeenUsed()) return;
//carryout task
}
private boolean hasCallDelay() {
long currentTime = System.currentTimeMillis();
if ((currentTime - timeOut) < TIME_DELAY) return true;
timeOut = currentTime;
return false;
}
这适用于单个方法调用,是否有一种优雅的方式只能为同一个输入超时?因此,如果输入“HELLO”,它会忽略x时间才能再次与“HELLO”通话。
我想也许某种数据结构可以在一段时间后删除条目。此外,现在只能从一个线程调用,但我猜测上面的解决方案不适用于多个线程。
这是一个运行的本地服务,有一些客户端可以连接到它并调用该方法。问题是用户可以双击UI并最终调用任务两次,我可以在UI上修复此问题但是我需要确保所有未来的客户端也这样做,所以宁愿在服务上停止它
答案 0 :(得分:3)
你可以尝试Guaua缓存基于时间的驱逐;简而言之,您可以配置缓存条目以在配置的间隔后自动删除。 您的代码应处理输入,当且仅当它在缓存中不可用时,并且在开始执行代码之前,您可以确保将该条目添加到缓存中。
https://code.google.com/p/guava-libraries/wiki/CachesExplained
答案 1 :(得分:2)
玩得开心.. :)