You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现用户输入重置Timer,无输入1分钟后终止程序?

实现带输入重置功能的超时终止程序

核心思路

  • 多线程分离输入监听与计时逻辑:输入操作是阻塞的,单独开辟线程处理,避免阻塞计时任务执行。
  • 用ScheduledExecutorService替代Timer:提供更灵活的任务调度能力,支持随时取消和重新调度超时任务。
  • 输入触发计时器重置:每次捕获到用户输入,立即取消当前计时任务,重新启动60秒倒计时。

完整实现代码

import java.util.Scanner;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;

public class InputTimeoutProgram {
    // 调度器用于执行计时任务
    private static final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
    // 用于跟踪当前的计时任务,方便取消重置
    private static ScheduledFuture<?> timeoutTask;
    // 超时时间设置为60秒
    private static final int TIMEOUT_SECONDS = 60;

    public static void main(String[] args) {
        // 启动初始计时器
        resetTimer();

        // 启动输入监听线程
        Thread inputThread = new Thread(() -> {
            Scanner scanner = new Scanner(System.in);
            while (true) {
                System.out.println("请输入内容(60秒无输入程序将终止):");
                // 阻塞等待用户输入
                String input = scanner.nextLine();
                // 输入不为空则重置计时器
                if (input != null && !input.trim().isEmpty()) {
                    System.out.println("收到输入:" + input);
                    resetTimer();
                }
            }
        });
        inputThread.start();
    }

    /**
     * 重置计时器:取消当前任务,重新调度新的超时任务
     */
    private static void resetTimer() {
        // 如果已有计时任务,先取消
        if (timeoutTask != null && !timeoutTask.isCancelled()) {
            timeoutTask.cancel(false);
        }
        // 调度新的超时任务,延迟60秒后执行
        timeoutTask = scheduler.schedule(() -> {
            System.out.println("\n60秒无输入,程序终止");
            // 终止程序
            System.exit(0);
        }, TIMEOUT_SECONDS, TimeUnit.SECONDS);
    }
}

关键代码说明

  1. ScheduledExecutorService调度器:单线程调度池保证计时任务串行执行,避免线程安全问题。
  2. 输入线程:通过Scanner监听控制台输入,每次输入完成后调用resetTimer()重置倒计时。
  3. resetTimer()方法:负责取消当前未完成的计时任务,重新启动60秒倒计时,确保每次输入后超时时间重新计算。
  4. 超时处理:计时任务触发时,打印提示信息并调用System.exit(0)终止程序。

内容的提问来源于stack exchange,提问作者cheesecakefactory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:20:30