我如何暂停扫描仪阅读和广播消息?

时间:2019-11-18 05:57:55

标签: java java.util.scanner dataoutputstream

我正在尝试实现客户端服务器应用程序。假设我有两个文件,Server.javaClient.java。我通过DataOutputStreamDatainputStream以及通过套接字编程与我连接。客户端在Server.java中实现了多线程。

现在,Server.java正在执行write.utf()来向Client.java写一个问题,并且Client.java在其终端中正在实现readUTF()并使用{{1 }}类以从用户键盘获取输入。

假设现在有另一个客户端线程想要向所有其他客户端广播消息。我如何在客户端控制台中停止/暂停/锁定Scanner以对客户端控制台进行Scanner广播消息?广播消息后,客户端应该能够恢复其活动。

1 个答案:

答案 0 :(得分:0)

一种可能的解决方案是使用Queue。当您从Scanner阅读时,可以将消息放入Queue中,直到将其发送出去。需要广播时,可以将其放置在Queue上(或根据情况放置在多个队列中)。只要确保您有多个线程访问Queue,您就将其放在synchronized代码块中。

在客户端-服务器的情况下,可能会使用LinkedBlockingQueue,因为这将允许您永久读取Queue,并且当它为空时,客户端或服务器将只是等待让Queue获得另一项而无需您进行任何持续检查。