如何暂停扫描仪阅读以广播消息



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

现在Server.java正在做一个write.utf()来向Client.java写一个问题,Client.java在其终端中实现了一个readUTF(),并使用Scanner类从用户键盘获取输入。

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

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

在客户端-服务器的情况下,LinkedBlockingQueue可能会很有用,因为这将允许您永远从Queue中读取,当它为空时,客户端或服务器只需等待Queue获取另一个项目,而无需对您进行任何持续检查。

最新更新