我试图编写一个循环,直到在运行应用程序的控制台中键入特定文本为止。就像是:
while (true) { try { System.out.println("Waiting for input..."); Thread.currentThread(); Thread.sleep(2000); if (input_is_equal_to_STOP){ // if user type STOP in terminal break; } } catch (InterruptedException ie) { // If this thread was intrrupted by nother thread }}
而且我希望它每次通过都写一行,所以我不希望它在一段时间内停止并等待下一个输入。我需要为此使用多个线程吗?
我需要为此使用多个线程吗?
是。
由于使用Scanneron System.in表示您正在阻塞IO,因此将需要一个线程专用于读取用户输入的任务。
Scanner
System.in
这是一个入门的基本示例(不过,我鼓励您研究java.util.concurrent用于执行此类操作的软件包。):
java.util.concurrent
import java.util.Scanner; class Test implements Runnable { volatile boolean keepRunning = true; public void run() { System.out.println("Starting to loop."); while (keepRunning) { System.out.println("Running loop..."); try { Thread.sleep(1000); } catch (InterruptedException e) { } } System.out.println("Done looping."); } public static void main(String[] args) { Test test = new Test(); Thread t = new Thread(test); t.start(); Scanner s = new Scanner(System.in); while (!s.next().equals("stop")); test.keepRunning = false; t.interrupt(); // cancel current sleep. } }