我正在开发一个应用程序(控制台),它包含一个我想让用户暂停和恢复的while循环。经过一些研究,似乎有一个额外的线程负责等待用户输入是正确的解决方案。
我已经能够实现不断等待输入的附加线程,并且还有一个kill方法,它设置flag变量来停止线程while()循环。不幸的是,由于while循环没有结束,除非有输入,这个kill标志只有在输入线程的while循环至少完成一次后才会生效。由于主线程还希望在它自己的循环结束时输入,用户的输入由输入线程获取,导致主线程的扫描器错过输入,除非输入两次。有没有办法在没有完成一次迭代的情况下立即终止输入线程的while()循环?是否需要某种超时功能?我已在下面发布了相关代码:
新线程的InputReader Runnable代码:
public class ReadInput implements Runnable
{
private static volatile boolean running = true;
Scanner user_input = new Scanner(System.in);
public void run()
{
while(running)
{
System.out.println("ReadingInput Input Value: " + user_input.nextLine());
}
}
public void kill()
{
running = false;
System.out.println("Thread Killed.");
}
}
主线程代码:
//Start reader thread in order to scan for input without stopping main code
ReadInput reader = new ReadInput();
Thread reader_thread = new Thread(reader);
reader_thread.start();
while(code_available_for_processing)
{
//Main Thread while() loop processing
}
//STOP Input Reader Thread before main thread requests input
reader.kill();
//Request user input for program re-run