【发布时间】:2015-02-21 03:52:03
【问题描述】:
我有一段来自简单聊天应用程序的代码,但这不是这个问题的重要部分。在我看来,这部分代码应该是无法访问的:
while (!end) {
outputToServer.println(consoleInput.readLine());
}
communicationSocket.close();
} catch (Exception e) {
// TODO: handle exception
}
}
@Override
public void run() { // receiving message from other clients
String serverTextLine;
try {
while ((serverTextLine = inputFromServer.readLine()) != null) {
System.out.println(serverTextLine);
if (serverTextLine.indexOf("*** Goodbye") == 0) {
end = true;
return;
}
}
} catch (Exception e) {
}
}
我不明白的是,当使用它作为条件的while循环在它之前时,程序将如何到达将“end”变量设置为true的代码部分......我想它是一些我不记得的基本 java 东西,还是我一直忽略的东西 :) 请帮忙?
【问题讨论】:
-
最明显的建议是其他一些线程在这里点击了关闭开关,将“end”设置为true。另一个明显的建议是,您将在要编写的 catch 块中设置一个“结束”。 (即,如果您失去连接,只需发送“end”并退出循环)
-
它不是“之前”。这些 while 循环使用不同的方法,如果您要覆盖
run(),您可能正在执行一些线程。 -
是的,
@Override在run方法之上的存在表明这个类要么是一个Thread,要么是一个将被线程使用的Runnable。所以这几乎可以肯定是多线程代码,其中一个线程设置end,另一个检查它。 -
@JonKiparsky 你的不满是有道理的,但这是网络编程的一个例子,所以被故意忽略了。我是线程和线程的新手,并且仍在了解这个概念,所以我相信您对其他线程是正确的。你们都是。谢谢!
标签: java while-loop logic conditional-statements unreachable-code