Вывод в консоль результата:
3
строка1
строка2
строка3
#1:[строка1, строка3]
#2:[строка2]
#3:[]
выхода из программы нет, поток висит.
Исключение InterraptException в методе run, перехватить вместе с IOException не дает.
Как можно нормально завершить run в этом случае и в каком месте поток виснет?
grobovsky
25 уровень
задача решена правильно, но исполнение программы нормально не завершается
Решен
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Pavlo PlynkoJava-разработчик в CodeGymExpert
6 ноября 2017, 16:33
Можно использовать while (!Thread.currentThread().isInterrupted())
0
Джонни Backend Developer Expert
12 декабря 2017, 18:53
По-моему, нет никакой разницы что использовать:
while (!isInterrupted())
или
(!Thread.currentThread().isInterrupted())
Эти методы синонимы. Так ведь?
Тут вопрос именно о reader.ready();
Я сам пыхтел пока не подсказали.
+2
Pavlo PlynkoJava-разработчик в CodeGymExpert
13 декабря 2017, 10:24
Это один и тот же метод класса Thread.
Первый вариант можно использовать только в не статичных методах наследников Thread, тогда фактически подставится
Второй вариант можно использовать где угодно.
Возвращать они могут разные значения, т.к. this не обязательно совпадает с Thread.currentThread().
0
Джонни Backend Developer Expert
13 декабря 2017, 19:00
Как он может не совпадать? this это же текущий объект, который в данный момент передан в метод. То есть, в данном случае, это текущая нить. Разве нет?
0
Pavlo PlynkoJava-разработчик в CodeGymExpert
14 декабря 2017, 08:33
Ну, можно придумать ситуацию когда нет:
0
Pavlo PlynkoJava-разработчик в CodeGymExpert
14 декабря 2017, 09:02
Согласен, тут вопрос был именно о reader.ready(). Мой ответ не в тему был...
0
Джонни Backend Developer Expert
14 декабря 2017, 09:09
Уау! Круто! Спасибо! Я бы и не подумал, что они могут быть разными. Зато мы узнали, что this и Thread.currentThread() могу быть разными. =)
0
Zuzu
6 ноября 2017, 12:50решение
Насколько я помню в курсе это не объясняется.
Суть такова что Нить должна работать только при условии что в вашей переменной например "reader" находится строка введенная с консоли.
Для этого нужно провести проверку, действительно ли переменная хранит значение ?.
Есть метод который определяет доступность переменной .ready();
Вам нужно прежде чем совершать какие либо действия с этой переменной, первой строкой в цикле провести проверку на то, хранит ли переменная значение (или другими словами доступна ли она для работы).
+3