处理读取输入的多个线程

时间:2013-12-12 19:49:39

标签: java multithreading

我正在开发一个应用程序(控制台),它包含一个我想让用户暂停和恢复的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

1 个答案:

答案 0 :(得分:1)

使用Thread班级的中断设施。这可能导致被阻塞的线程等待输入抛出InterruptedIOException。有关详细信息,请参阅elsewhere