java - 我如何暂停扫描仪阅读以广播消息?

标签 java java.util.scanner dataoutputstream

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

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

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

最佳答案

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

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

关于java - 我如何暂停扫描仪阅读以广播消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58908717/

相关文章:

Java Tic Tac Toe 构造函数

java - 是否可以将文本从 edittext 传递到 webview?

java - 为什么从输入读取时 Scanner 比 BufferedReader 慢?

java - DataOutputStream#writeBytes(String) 与 BufferedWriter#write(String)

java - TCP 套接字连接 Java Client<-> c++ 服务器中的意外行为

java - "Bringing my Java application to Mac OS X": Menus

java - JVM 尝试加载一个未被调用的类

java - 如何在java.util.Scanner中匹配两个或多个空格?

java - 如何修复此单人骰子游戏(4 - 4 面骰子)的循环?扫描仪输入无法产生正确输出的问题

java - 从 Socket 读取时卡在写操作中