【发布时间】:2019-01-27 19:23:37
【问题描述】:
我正在尝试终止子线程,它正在等待来自服务器的输入。我试过用国旗做,但它停在
message = serverReader.readLine() && !isClosed(),
因为它等待来自服务器的输入,并且只有在此输入之后它才检查标志并中断。但这不是一个好的解决方案,因为没有服务器消息我无法停止它。
我还尝试先检查标志,然后检查 readline(),但它也不起作用。
有什么好的解决办法吗?
@Override
public void run() {
String message;
try {
while((message = serverReader.readLine()) != null && !isClosed()) {
consoleWriter.println("Other user: " + message);
consoleWriter.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void setUpNetworking() {
try {
Socket socket = new Socket("127.0.0.1", 5000);
InputStreamReader streamReader = new InputStreamReader(socket.getInputStream());
serverWriter = new PrintWriter(socket.getOutputStream());
serverReader = new BufferedReader(streamReader);
//Starting listening messages from server
incomeReader = new Thread(new IncomeMessagesReader(serverReader, consoleWriter, this));
incomeReader.start();
System.out.println("Networking established");
} catch (IOException e) {
e.printStackTrace();
}
}
【问题讨论】:
-
不,我已经读过了。他们使用标志的问题,我也有来自服务器的 readline(),这会停止处理和标志检查
-
什么是 serverReader?
-
我用 serverReader 更新了问题
-
@AndrewTobilko 是否有可能直接中断线程而不是关闭套接字会造成泄漏?
-
@BheshGurung hhm,这很有趣...我不确定,但我认为某些资源可能被错误地释放/或根本没有释放,因此可能存在泄漏。跨度>
标签: java multithreading java-threads