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

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