一个限时功能,类似防重复提交功能

 一个限时功能,其中如果在两秒内传递的参数相同, 则第二次及以后的相同参数将返回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();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值