Мониторинг состояния нити

  • 13
  • Недоступна
Cоздай класс нити LoggingStateThread, которая будет выводить в консоль все состояния (State) переданной в конструктор нити. Нить LoggingStateThread должна сама завершаться после остановки переданной в конструктор нити. Метод main не участвует в тестировании.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (78)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Wladyslaw32 уровень, Warsaw
28 декабря 2019, 12:57
Насколько я понимаю многопоточность - задача не выполнена, в том виде в котором ее принимает валидатор. Ведь пока мы у себя в треде гоняем какую-то логику по поводу состояния таргета - его состояние может изменится и инфа уже будет не актуальна.
Anton Rymarenko31 уровень
12 сентября 2019, 20:42
про нити понял не много ,но зато отслеживать состояние научился ))
Николай35 уровень
25 июля 2019, 08:27
Хорошая задачка на понимание нитей и их состояния. Решается действительно легко. Только перед сдачей рекомендую выполнить код раз десять и проверить что всегда выводится строго три строки. В противном случае ищите ошибку.
Vadim Krant27 уровень, Москва
12 июня 2019, 14:00
Меня так увлекла задача что я за 3 минуты её решил, простой цикл который отслеживает предыдущее состояние и сравнивает с нынешним. Накололся с тем, что сделал демоном эту нить, неожиданно, но это не правильно, просто сами выключаем эту нить когда выходим за пределы цикла. 5694, 4.17
skybright41 уровень
10 июля 2019, 11:51
выключать не обязательно, нить завершается сама после цикла
S3R3N1TY37 уровень, Санкт-Петербург
6 марта 2019, 11:06
Почему если я в конструкторе нашего "Следящего" потока указал, что пускай он будет демоном
public LoggingStateThread(Thread thread) {
       logThread = thread;
       setDaemon(true); }
то он ведь должен автоматически завершиться если никаких других потоков больше не осталось, правильно ? А валидатору нужно this.Интеррапт прописать после цикла, чтобы принял. UPD: Понял, у нас к тому моменту, еще метод Main продолжает работать из-за строчки Thread.sleep(100); поэтому наш "Следящий логер" еще не откинул копыта, так как демону нужно чтобы все остальные потоки ушли на покой, тогда и он завершится.
Tom Riddle35 уровень, Москва
24 июля 2019, 09:57
"this.Интеррапт" делать не обязательно и подозреваю, что даже не рационально. Достаточно выйти из бесконечного цикла использовав break. Метод run завершится и тред сам умрет.
Ivan34 уровень, Нижний Новгород
22 августа 2019, 12:02
да, точно, оказывается наблюдаемая нить сразу стартует и сразу дохнет, просто комментарий в программе смущает будто нить дохнет после sleep, отсюда и недопонимание. p.s. выходил из цикла условием появления state.terminated
Vitaly Khan40 уровень
31 декабря 2018, 00:33
первый раз с таким столкнулся. один и тот же код, валидатор то пропускает, то не пропускает!... (на Премиум Про можно несколько раз сдать задачу на проверку)
Vitaly Khan40 уровень
4 марта 2019, 09:47
может, это связано с тем, что в моем решении вывод то:
NEW
RUNNABLE
TERMINATE
то:
NEW
RUNNABLE
TERMINATE
TERMINATE
Юрий41 уровень, Минск
6 марта 2019, 19:42
это точно) надо добиться такого состояния что бы было только 3 записи
King41 уровень, Санкт-Петербург
14 ноября 2018, 14:50
Охренеть, я в шоке просто! Цитирую строчку из задания: "...которая будет выводить в консоль ВСЕ состояния (State) переданной в конструктор нити". Каким раком я должен был догадаться, что они должны выводиться без повторов?! ВСЕ в моём понимании - это ВСЕ!
Ivan34 уровень, Нижний Новгород
22 августа 2019, 12:04
ну, все состояния это new,runnable и terminated, а повторы это уже бесполезный мусор который не даёт информации о новой состоянии, так что логично что нужны именно 3 штуки
King41 уровень, Санкт-Петербург
25 августа 2019, 23:03
Нет, не логично. Условие можно трактовать и так, и так. И это проблема тех, кто написал условие. Не надо выпендриваться.
Ivan34 уровень, Нижний Новгород
26 августа 2019, 06:49
окей, а на вопрос в каких положениях человек может ехать на поезде, вы тоже ответите : сидя, сидя, сидя, лёжа, стоя, стоя? Или если вопрос был поставлен так "..сколько состояний имеет нить?.." Ваш ответ был бы не 3? Конечно, если быстро пробежаться глазами и сразу начать делать, то много может ускользнуть, я тоже попадаюсь на этом. Просто надо хорошенько обдумать условие и станет всё понятно(в большинстве случаев).
Valeriy2941 уровень
1 ноября 2018, 22:24
опять куча попыток из за Валидатора. Не принял пока перед циклом не вывел состояние.
Andry Max35 уровень, Минск
22 августа 2018, 18:12
та ещё угадайка. зачем изучали демона не понятно.
Ivan34 уровень, Нижний Новгород
22 августа 2019, 12:08
чтобы понять, что не везде он может помочь. Демон полезен когда все остальные завершают работу, а когда надо отследить завершение какой то конкретной нити, то демон не помощник и надо ручками прописывать.
Rodriguez33 уровень
10 августа 2018, 00:46
Валидатор не принимал решение, пока в конструкторе не прописал строчку: System.out.println(thread.getState());
VN40 уровень
30 июля 2019, 15:17
Спасибо, выручил