当前位置: 首页 > 知识库问答 >
问题:

处理多线程读取输入

熊烨
2023-03-14

我正在开发一个应用程序(控制台),其中包含一个while循环,我希望允许用户暂停和恢复。经过一些研究,似乎一个额外的线程负责等待用户输入是正确的解决方案。

我已经能够实现持续等待输入的额外线程,并且还有一个kill方法,它设置flag变量来停止线程while()循环。不幸的是,除非有输入,否则while循环不会结束,只有在输入线程的while环至少完成一次后,这个kill标志才会生效。由于主线程也希望在自己的循环结束时输入,用户的输入被输入线程接受,导致主线程的Scanner错过输入,除非输入两次。有什么方法可以立即终止输入线程的while()循环而不必完成一次迭代吗?是否需要某种超时功能?我已发布以下相关代码:

新线程的InputReader可运行代码:

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个答案

慕通
2023-03-14

使用Thread类的中断工具。这可能会导致被阻塞等待输入的线程抛出InterruptedIOException。有关更多信息,请参阅其他地方。

 类似资料:
  • 我必须使用Spring Batch配置一个作业。是否可以有一个单线程的项目阅读器,但多线程处理器? 在这种情况下,ItemReader将通过从数据库中读取工作项(通过执行预定义的查询)来创建要处理的工作项,每个处理器将并行处理项/块。

  • 我应该设计一个组件,该组件应该通过在Java中使用多线程来实现以下任务,因为文件非常大/多,而且任务必须在很短的窗口内完成: 读取多个csv/xml文件并将所有数据保存在数据库中 读取数据库并将数据写入单独的csv文件 我对多线程很陌生 请告诉我您建议在Java或Spring Batch中使用传统的多线程。这里的输入源是多个的,输出源也是多个的。

  • 问题内容: 我正在测试本地计算机上的套接字。我正在尝试使用线程在一个程序中同时运行套接字和服务器。我的服务器是回显服务器,因此它可以将收到的所有消息发回。我的问题是,当我同时在客户端和服务器上启动两个线程时,当它们到达我从输入流读取的部分时,它们将“冻结”。它可以很好地工作到客户端发送消息的那部分。然后,它停止了,因为似乎客户端正在等待消息,服务器也是如此,即使我已经通过写入输出流向服务器发送了消

  • 在Spring批处理中,我试图读取CSV文件,并希望将每一行分配给一个单独的线程并对其进行处理。我试图通过使用TaskExecutor来实现它,但所有线程都在一次拾取同一行。我还尝试使用Partioner实现这个概念,同样的事情也发生了。请参阅下面我的配置Xml。 步骤说明 我尝试过不同类型的任务执行器,但它们的行为方式都是一样的。如何将每一行分配给单独的线程?

  • 我正在尝试使用多个处理器类在处理器步骤中处理记录。这些类可以并行工作。目前我已经编写了一个多线程步骤,其中我 设置处理器类的输入和输出行 提交给遗嘱执行人服务 获取所有未来对象并收集最终输出

  • 我有一个图像路径列表,我想在进程或线程之间划分,以便每个进程处理列表的某些部分。处理包括从磁盘加载图像,进行一些计算并返回结果。我正在使用Python 2.7 下面是我如何创建辅助进程 我所面临的问题是,当我在initializer函数中记录初始化时间时,我知道worker不是并行初始化的,而是每个worker都以5秒的间隔初始化,下面是供参考的日志 我尝试过使用将同时启动辅助线程 我知道Wind