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

  • 13
  • Недоступна
Cоздай класс нити LoggingStateThread, которая будет выводить в консоль все состояния (State) переданной в конструктор нити. Нить LoggingStateThread должна сама завершаться после остановки переданной в конструктор нити. Метод main не участвует в тестировании.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (61)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
Vitaly Khan35 уровень
31 декабря 2018, 00:33
первый раз с таким столкнулся. один и тот же код, валидатор то пропускает, то не пропускает!... (на Премиум Про можно несколько раз сдать задачу на проверку)
King35 уровень, Санкт-Петербург
14 ноября 2018, 14:50
Охренеть, я в шоке просто! Цитирую строчку из задания: "...которая будет выводить в консоль ВСЕ состояния (State) переданной в конструктор нити". Каким раком я должен был догадаться, что они должны выводиться без повторов?! ВСЕ в моём понимании - это ВСЕ!
Valeriy2941 уровень
1 ноября 2018, 22:24
опять куча попыток из за Валидатора. Не принял пока перед циклом не вывел состояние.
Andry Max35 уровень, Минск
22 августа 2018, 18:12
та ещё угадайка. зачем изучали демона не понятно.
Rodriguez32 уровень
10 августа 2018, 00:46
Валидатор не принимал решение, пока в конструкторе не прописал строчку: System.out.println(thread.getState());
Павел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
мда, а вот про то что не надо выводить у проверяемой нити состояние, если оно не сменилось я не догадался, эххх.
Mark34 уровень, Санкт-Петербург
9 августа 2018, 18:40
к чему полумеры можно получить target.getState() второй строчкой в конструкторе .) няп это самая первая точка программы, где мы уже знаем входящую нить к тому же переменные нити-логеа уже объявлены и ждут инициализации
public LoggingStateThread(Thread target) {
    this.target = target;
    currentState = target.getState();
    System.out.println(currentState);
    }
таким образом мы гарантированно считаем состояние переданной нам нити еще до завершения работы конструктора нити-логгера, т.е. до запуска любой из нитей с демоном валидатор не принимает? какая ему собственно разница
Сергей36 уровень, Москва
6 июля 2018, 11:06
При наблюдении за нитью из другой нити можно пропустить получение нужных данных в зависимости от некоторых факторов, таких как: количества ядер, их загруженности, приоритетах и других проблем операционной системы. Я смотрю 74% людей, решавших эту задачку, как раз испытали на себе подобные проблемы. Я просто посоветую: - получить getState() сразу при входе в run() и записать ее в переменную - получить getState() сразу при входе в while(true) и записать ее в переменную потом уже сравнивать - вызов нескольких getState() в одном цикле тормозит проверку, состояние может поменяться в пределах одного шага цикла. Удачи!
Денис30 уровень, Минск
23 апреля 2018, 11:33
Определял как демон в конструкторе объект LoggingStateThread. Но такое решение не принимало. Просто выходил из цикла при получении значения TERMINATED(Завершал метод run)
NastyaGermanovich35 уровень, Санкт-Петербург
26 марта 2018, 15:19
Не забудьте прервать нить LoggingStateThread после цикла вывода состояний!! this.interrupt(); И еще валидатор не принимал, пока в цикле вывода не привела thread.getState() к строке. Хотя, на вывод это никак не влияет!