我正在使用套接字和线程创建一个简单的控制台聊天应用程序。我有两个不同的线程来发送和阅读消息。除了一件事,一切都很好。如果我当前在发送线程内,我必须阻止读者线程。
@Override
public void run() {
input = In.readLine();
while (!input.equals("x")) {
if (input.isEmpty()) {
Out.println("----------------------------");
Out.print("Your message: ");
message = In.readLine();
Out.println("----------------------------");
writer.println(message);
writer.flush();
}
input = In.readLine();
}
}
这是阅读主题
@Override
public void run() {
try {
while ((receivedMessage = reader.readLine()) != null) {
Out.println("Received message: " + receivedMessage);
}
} catch (IOException ex) {
}
}
我要做的是:如果我正在写一条消息“message = In.readLine()”,同时我收到一些消息,这些消息只有在我完成输入后才会显示。 / p>
答案 0 :(得分:2)
有多种方法可以做到这一点。也许最简单的方法是在键入要发送的消息时使用监视器锁定接收消息的显示。基本上有一个Object
- 您可以将其称为displayLock或类似的东西 - 并在块中同步Object
发送线程中if
块的前四行和{接收线程中的{1}}行。这样,两个同步块中只有一个可以一次进行。