java - 使用线程输入

标签 java multithreading java.util.scanner

import java.util.Scanner;

public class ThreadClass {

    public static void main(String[] args) 
    {
        System.out.println("Type the following in 5 seconds");
        System.out.println("The quick brown fox jumps over the lazy dog");

        try {
            Scanner sc = new Scanner(System.in);
            String str=sc.nextLine();
            Thread.sleep(1000);
            System.out.println("Your time is over");

        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}

在上面的程序中,我希望我的程序应该要求用户在五秒(或 5000 毫秒)内输入内容,并在时间结束后自动关闭并显示一条消息“您的时间已结束”。这段代码的问题在于,每当用户输入内容时,除非按下 Enter 键,否则线程似乎无法工作。我尝试在 try catch block 之外甚至在线程下方编写扫描器代码,但它们似乎都不起作用。我认为问题出在我的 Scanner 类上,但无法弄清楚如何输入数据。

最佳答案

提示:您必须有 2 个线程 - 一个用于输入,另一个用于计时器。一旦计时器到期,就中断输入线程。 例如:

final Thread subject1 = new Thread(new Runnable() {

  public void run() {
    while (!Thread.interrupted()) {
      Thread.yield();
    }
    System.out.println("subject 1 stopped!");
  }
});
final Thread subject2 = new Thread(new Runnable() {

  public void run() {
    while (!Thread.interrupted()) {
      Thread.yield();
    }
    System.out.println("subject 2 stopped!");
  }
});
final Thread coordinator = new Thread(new Runnable() {

  public void run() {
    try {
      Thread.sleep(500);
    } catch (InterruptedException ex) { }
    System.out.println("coordinator stopping!");
    subject1.interrupt();
    subject2.interrupt();
  }
});
subject1.start();
subject2.start();
coordinator.start();

关于java - 使用线程输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37135654/

相关文章:

Java:使用扫描仪分隔符作为标记

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - 无限循环 - Scanner.hasNextInt() 在 while 循环内

java - 在Struts2中加载长时间运行的初始化数据时如何避免WSOD(黑屏)?

multithreading - 如何在主线程上执行回调

java - zk zkoss 中的 ArrayIndexOutOfBoundsException 错误

c++ - glibmm 超时信号

objective-c - 如何获取当前正在执行的 NSOperation?

java - 处理多个用户在 Web 应用程序中更新相同的表单

java - 我们可以用 ArrayDeque 替换 ArrayList 以获得更好的性能吗?