1

我目前正在用 JAVA 开发一个项目,我必须制作一个代理来与服务器交互。

每 50 毫秒,服务器将接收我输出到 System.out 的最后一件事,并通过 System.in 打印流向我发送一组新的行作为“状态”,以分析并将我的下一条消息发送到 System.out。

此外,如果服务器从我那里收到多个输出,它只考虑最近的一个。

..

至于我的问题:

我的程序最初构建了一棵树,然后分析每个叶节点以查看哪个是最佳的,然后等待下一个输入,但我可以递归地进行更深入的树搜索,这将使我的输出“更好”(一次又一次继续返回更好的结果)。

使用这一点,如果服务器接收到多个输出,它只需要最近的一个,我可以执行每个级别,打印我的结果并开始下一个级别。但是我的问题来了...

当我应该接收下一个输入时,我不能陷入一些复杂的算法中,因为我会错过它。所以我想知道当我通过 System.in 收到一些东西时是否有办法取消我正在做的任何其他事情,然后返回到函数的开头并使用新的输入集再次开始搜索(然后冲洗并重复..)

我希望这一切都有意义

谢谢大家

4

1 回答 1

3

您在这里绝对需要多个线程(或多个进程)。

我假设你已经解决了接收输入System.in的问题,以及你的算法问题。下一步是将每一个都打包到一个Runnable接口中,并为每一个传递一个对队列对象的引用。这将构建生产者-消费者关系。

每当您的收听Runnable者(生产者)收到一条消息时,它都需要将其放入您的队列中。在每个工作单元之后,您的算法(消费者)应该查看队列中的项目。如果它发现了什么,它应该像往常一样整合它。如果没有,它会继续它的工作。

Producer 和 Consumer 都需要在各自的线程中启动并允许并发运行。

于 2012-09-26T15:51:53.833 回答