【发布时间】:2015-09-29 22:41:38
【问题描述】:
我是 Java 新手,我正在尝试制作客户端-服务器形式。客户端和服务器可以互相聊天。所以我的客户有 2 个线程用于 2 个任务:发送和接收消息。我希望当我的 SendThread 从键盘字符串“Bye”读取时,我的客户端将停止 2 个线程。但问题是线程接收仍然执行 BufferedReader 的语句 readline() 所以它无法到达出口 这是我的代码:
try {
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (!stop) {
String temp = br.readLine();
if (temp.length() == 0) {
Thread.sleep(100);
}
else System.out.println(" Receiving from server: " + temp);
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
更新:对不起大家,因为我没有更清楚地解释。我的客户有 2 个线程独立运行。因此,此代码所在的 ReceiveThread 始终可以等待来自服务器的消息。并且 SendThread 也总是从键盘读取数据。所以当我输入“Bye”时,SendThread 读取这个字符串并停止客户端。问题是 ReceiveThread 正在执行readLine(),因此它无法自行停止。
【问题讨论】:
-
while (!stop)奇怪的情况,因为你没有改变stop。 -
stop会在我关闭 SendThread 时改变。我不在这里发布该代码 -
如果服务器关闭了套接字,你会关闭那个线程吗?因为这是您喜欢停止阅读的条件之一。您在哪里处理收到的消息“Bye”?如果尝试更改代码时“无处”,则可以检测到关闭的流或消息“再见”。当前的答案可能会对您有所帮助。
-
睡觉是为了什么?这简直就是浪费时间。拿出来。
标签: java multithreading