У меня есть кусок кода из простого приложения чата, но это не важная часть этого вопроса. Это часть кода, который, как мне кажется, должно быть недостижимым:Достижение кода после цикла java
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) {
}
}
То, что я не понимаю, как будет программа когда-либо достичь часть кода, в котором она устанавливает «конец» переменную к true, когда цикл while, который использует его как условие, перед ним ... Я полагаю, что это какой-то базовый java-материал, который я не помню, или что-то, что я настойчиво игнорирую :) Помогите, пожалуйста?
Самое очевидное предположение, что какая-то другая нить попадает в выключатель здесь, устанавливая «конец» в true. Другое очевидное предположение состоит в том, что у вас будет «конец», установленный в блоке catch-to-write. (т. е. если вы потеряете соединение, просто отправьте «конец» и выйдите из цикла) –
Это не «до». Те while-loops находятся в разных методах, и если вы переопределяете 'run()', вы, вероятно, делаете некоторые потоки. – azurefrog
Да, существование '@ Override' над методом' run' является признаком того, что этот класс является либо «Thread», либо «Runnable», который будет использоваться потоком. Так что это почти наверняка многопоточный код, где один поток устанавливает 'end', а другой проверяет его. –