Реализуй логику метода interrupt, который должен прерывать трэд предварительно закрыв используемые ресурсы.
Используй метод super-класса в блоке finally.
Работать в поте лица!
- 7
Недоступна
Комментарии (31)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Михаил
22 февраля, 12:06
Коллеги, возник вопрос. Зачем super.interrupt() обязательно убирать в блок finnally?
Он ведь и так отработает.
Для себя пока нашел только объяснение, что может выскочить исключение не улавливаемое блоком catch (IOException e) и тогда программа прервется. Хотя какое здесь может быть еще исключение?
Есть ли в этом есть другой смысл?
0
Sergey Kornilov
22 января, 14:47
Всего эту задачу решили 9246 учеников.
0
Max Zap
6 октября 2021, 20:15
Этот easy и прошлый hard по сложности почти идентичны...
0
Максим Дудин
13 июля 2021, 15:25
Нужно обратить внимание на условие:
"Трэд должен быть прерван в любом случае, даже если во время закрытия ресурсов было выкинуто исключение."
- в catch которым оборачивается закрытие сокета должен быть (IOException ignored)
не забыть, что super.interrupt в finaly ...
0
Даниил Александрович
12 марта 2021, 05:43
чем проще задача тем меньше комментариев! ;)
0
Евгений
28 июня 2020, 07:35
Обязательно надо закрывать и Socket и InputStream, хотя закрытие одного должно автоматически закрывать другой.
0
Максим Дудин
13 июля 2021, 15:27
InputStreamе не обязательно (в эталонном варианте его не закрывают), но "руку на отсечение" не дам, потому что сначала тоже закрыл и в таком виде решение прошло валидацию
0
alex
16 июня 2020, 13:12
народ поясните вот это:
super.interrupt();
+2
Bonus
12 августа 2020, 18:41
Поток останавливается когда мы закрываем ресурсы:
а super.interrupt() выставляет флаг что поток прерван 0
Android Developer Android Developer в Яндекс
7 октября 2020, 21:52
мы переопределили метод interrupt(), super.interrupt() это вызов метода "настоящего", который находится в классe Thread, от которого мы наследуемся.
+9
Islam Laipanov
10 мая 2020, 23:54
кто знает если socket.close(), то in закрывается автоматически или нужно каждый по отдельности закрывать?
+1
Agent Smith
30 ноября 2020, 16:06
Наведи мышкой на метод .close() у сокета и увидишь:
Closing this socket will also close the socket's InputStream and OutputStream.
If this socket has an associated channel then the channel is closed as well.
+2
Максим Дудин
13 июля 2021, 15:22
точнее нажать ctrl и левая клавиша мыши по close
Спасибо... это объясняет отсутствие in.close(); в референсном решении
0
Aka_ron4uk Java Developer
27 апреля 2020, 10:31
При прерывании потока через Thread.currentThread().interrupt(); Ловим "Неизвестная ошибка..."
Вариант через super.interrupt() спасает. Может кстати кто нибудь пояснить почему? Эти методы в рамках текущей задачи разве не выполняют одно и то же?
+1
Yerzhan
28 марта 2020, 19:42
совсем забыл про многопоточность и не мог понять задачку, пока не прочитал следующее
1. Java Полное руководство Шилдта глава №11 Многопоточное программирование, около первых 10 страниц было достаточно
2. https://javarush.ru/groups/posts/654-klassih-socket-i-serversocket-ili-allo-server-tih-menja-slihshishjh, чтобы понять что за ресурсы.
после этого решил с 4 попытки, из за того, что finally() поставил в run(), переставил в interrupt() и валидатор принял, невнимательность.
+3