Очень долго мучался с 4-й нитью. 14 попыток решения задачи - мой рекорд ))) Обычно 1-2 попытки.
Вот мой вариант кода, который не прошел проверку:
public void run() {
@Override
public void showWarning() {
currentThread().interrupt();
}
@Override
public void run() {
while (!currentThread().isInterrupted()) {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
System.out.println("InterruptedException");
}
}
}
}
Что не так, я неправильно реализовал прерывание нити? Я пытался заменить прерывание нити на свою переменную boolean, как в примере ниже, было все тоже самое, только название переменной свое - не прошло.
А вот этот код я скопипастил из соседнего вопроса и он сразу пролез. В чем отличие, почему валидатор заворачивал мои варианты?
public void run() {
private boolean myStop = false;
@Override
public void showWarning() {
myStop = true;
}
@Override
public void run() {
try {
while ( !myStop ) {
Thread.sleep(0);
}
} catch (InterruptedException e) {}
}
}
Вот пятая нить, ее валидатор ИНОГДА проверяет положительно, а иногда заворачивает с ошибкой:
public void run() {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String s;
int i = 0;
try {
while (!"N".equals(s = reader.readLine())) {
i += Integer.parseInt(s);
}
reader.close();
System.out.println(i);
}
catch (IOException e) { }
}