Очень долго мучался с 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) { }
}