如何启动线程但保持一段时间?

时间:2014-12-24 01:23:40

标签: java multithreading java.util.scanner

我真的不想开始一个线程然后让它进入睡眠状态,例如:

Thread.start();
Thread.sleep(3000);  //*Example* 

相反,我希望这样的事情(我为这个业余插图道歉):

Thread.start(3000) //*thread will be given a certain amount of time to execute* 

 //*After 3000 milliseconds, the thread stops and or sleeps*

我之所以这样做,是因为我制作了一个程序/迷你游戏,用户输入一段时间。基本上,用户有5秒钟输入某个字符/数字/字母,在此之后,输入流被切断。有点像:

Scanner kb = new Scanner(System.in);
int num = kb.nextInt();
kb.close()    //*Closes kb and input stream in turn*

2 个答案:

答案 0 :(得分:3)

我建议您使用ScheduledExecutorServicescheduleWithFixedDelay(Runnable, long, long, TimeUnit)。如果用户在延迟到期之前完成任何任务,您可以取消该操作。如果延迟用完,那么用户就会失败。

答案 1 :(得分:0)

你可以尝试这个样本。

    final List<Integer> result = new ArrayList<>();
    Thread thread = new Thread() {
        volatile boolean isDone = false;
        Timer timer = new Timer();

        @Override
        public void run() {
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    isDone = true;
                }
            }, 5000);

            Scanner kb = new Scanner(System.in);
            while (!isDone) {
                int num = 0;
                num = kb.nextInt();
                result.add(num);
            }
            kb.close();
        }

    };
    thread.start();
    thread.join();

    for (Integer i : result) {
        System.out.print(i + " ");
    }