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

  • 14
  • Недоступна
Cоздай класс нити LoggingStateThread, которая будет выводить в консоль все состояния (State) переданной в конструктор нити. Нить LoggingStateThread должна сама завершаться после остановки переданной в конструктор нити. Метод main не участвует в тестировании.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (92)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
barracuda26 уровень, Санкт-Петербург
25 июля, 21:31
Как правильно написал ранее Сергей, состояние нити может меняться очень быстро, и если писать лишний код и по много раз вызывать .getState(), можно что-нибудь упустить. Поэтому в методе run(): 1. Сохранить в переменную текущее состояние: Thread.State state1 = target.getState(); 2. Вывести егов консоль: System.out.println(state1); 3. В бесконечном цикле while(true): 3.1. Получить значение текущего состояния и записать в переменную еще раз: Thread.State state2 = target.getState(); 3.2. Если state1 != state2 ----> выводим state2 в консоль 3.3. присваиваем state1 = state2; (чтобы в следующий раз сравнивать с обновленной переменной, а не со старой. 3.4. если state2 == State.TERMINATED -----> return (условие выхода из бесконечного цикла) 4. Все. 5. Пока не будет такого вот устойчивого вывода в консоль несколько раз подряд, на валидацию лучше не отправлять: NEW RUNNABLE TERMINATED
Сафронов Алексей29 уровень, Йошкар-Ола
25 мая, 13:32
Может кому поможет мое решение. В переопределяемом run() вызываем run() суперкласса. Создаем переменную (boolean) для выхода из цикла мониторинга, а также Arraylist строковых состояний нити. В цикле do-while в строковую переменную считываем текущий статус нити, далее проверяем есть ли значение данной переменной в Листе - если нет добавляем и печатаем его же в консоль. Далее сравниваем значение этой строковой переменной со значением "TERMINATED", и если оно такое булевая переменная меняет значение на маркер выхода из цикла do-while.
Иван Ганжа30 уровень, Москва
26 мая, 20:50
1.Зачем вызывать run супер класса? 2. Зачем создавать лист, если можно работать сразу с енумом? 3. Зачем логическая переменная, если можно сделать бесконечный цикл с брейком по треминатед?
Kex37 уровень, Тольятти
14 мая, 15:01
Задачка простая но нервы вытрепал валик, у кого то через switch - case прошло?
16 июля, 08:35
свич не нравится :( сделал все по красоте - не принимает
Alexey Prilessky31 уровень, Минск
8 мая, 17:27
Задачу можно решить как минимум 3-мя способами, но валидатор хочет именно тот, где цикл останавливается в случае если state = TERMINATED
Евгений40 уровень, Нижний Новгород
14 апреля, 17:42
С первой попытки за 5 минут. Тут главное - не бояться и идти по своему внутреннему чувству. По сути алгоритм простейший: если состояние нити отличается от старого, выведите его на экран. Если состояние TERMINATED, закончите цикл.
Islam Laipanov30 уровень, Москва
10 мая, 22:46
по своему внутреннему чувству можно погоду предсказывать, а в программировании лучше четко понимать, что ты делаешь)
Евгений40 уровень, Нижний Новгород
11 мая, 13:19
Ну конечно надо понимать, что ты делаешь, а кто-то спорит? К чему здесь вообще ваш комментарий?😐
Islam Laipanov30 уровень, Москва
11 мая, 17:54
так, поумничать. тут все умничают
Ольга30 уровень, Москва
18 мая, 14:07
спасибо за подсказку
Алексей Чумаков30 уровень, Ногинск
28 июня, 10:09
Алгоритм простейший, отрабатывает но не проходит валидацию) P.S.Оказывается Terminated тоже надо выводить в консоль, а не сразу выходить
16 июля, 08:46
а у меня терминейтед не выводит почему то
Oleksandr Myrko31 уровень, Львов
2 апреля, 10:11
Мониторим в бесконечном цикле изменение состояния target, и рвем цикл когда его состояние станет равно INTERRUPTED
Wladyslaw41 уровень, Warsaw
28 декабря 2019, 12:57
Насколько я понимаю многопоточность - задача не выполнена, в том виде в котором ее принимает валидатор. Ведь пока мы у себя в треде гоняем какую-то логику по поводу состояния таргета - его состояние может изменится и инфа уже будет не актуальна.
Anton Rymarenko41 уровень
12 сентября 2019, 20:42
про нити понял не много ,но зато отслеживать состояние научился ))
Николай35 уровень
25 июля 2019, 08:27
Хорошая задачка на понимание нитей и их состояния. Решается действительно легко. Только перед сдачей рекомендую выполнить код раз десять и проверить что всегда выводится строго три строки. В противном случае ищите ошибку.
Vadim Krant27 уровень, Москва
12 июня 2019, 14:00
Меня так увлекла задача что я за 3 минуты её решил, простой цикл который отслеживает предыдущее состояние и сравнивает с нынешним. Накололся с тем, что сделал демоном эту нить, неожиданно, но это не правильно, просто сами выключаем эту нить когда выходим за пределы цикла. 5694, 4.17
skybright41 уровень
10 июля 2019, 11:51
выключать не обязательно, нить завершается сама после цикла