一个限时功能,其中如果在两秒内传递的参数相同, 则第二次及以后的相同参数将返回false,否则返回true, 可以使用ScheduledExecutorService来定期检查和重置参数状态。
直接上代码:
/**
* 一个限时功能,其中如果在两秒内传递的参数相同,
* 则第二次及以后的相同参数将返回false,否则返回true,
* 可以使用ScheduledExecutorService来定期检查和重置参数状态。
*/
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicReference;
public class ParameterTimeoutChecker {
public static int LIMIT_TIME_SECONDS = 1;
private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
private final AtomicReference<String> lastParameter = new AtomicReference<>();
private final ScheduledFuture<?> timeoutTask;
public ParameterTimeoutChecker() {
/**
* long initialDelay:在首次执行任务前等待的时长(单位由 TimeUnit 参数指定)。在这个例子中,2 表示首次执行 resetParameter 方法前等待 2 秒。
*
* long period:每次执行任务之间的间隔时长(单位同样由 TimeUnit 参数指定)。这里同样设为 2,意味着 resetParameter 方法将每 2 秒执行一次。
*/
timeoutTask = scheduler.scheduleAtFixedRate(this::resetParameter, LIMIT_TIME_SECONDS, LIMIT_TIME_SECONDS, TimeUnit.SECONDS);
}
public boolean checkParameter(String parameter) {
if (lastParameter.get() == null || !lastParameter.get().equals(parameter)) {
// 参数改变或首次调用,更新参数并返回true
lastParameter.set(parameter);
return true;
} else {
// 参数在两秒内未改变,返回false
return false;
}
}
private void resetParameter() {
// 每两秒重置lastParameter,允许新的参数值
lastParameter.set(null);
}
public void shutdown() {
// 停止定时任务和执行器
timeoutTask.cancel(false);
scheduler.shutdown();
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
ParameterTimeoutChecker checker = new ParameterTimeoutChecker();
// 模拟参数检查
System.out.println(checker.checkParameter("param1")); // 输出true
Thread.sleep(1000);
System.out.println(checker.checkParameter("param1")); // 输出false
Thread.sleep(1000);
System.out.println(checker.checkParameter("param2")); // 输出true
Thread.sleep(3000);
System.out.println(checker.checkParameter("param2")); // 输出true
checker.shutdown();
}
}

5万+

被折叠的 条评论
为什么被折叠?



