Приоритеты в Threads

  • 16
  • Недоступна
В отдельном файле создай класс MyThread унаследовавшись от Thread. MyThread должен: 1. Иметь возможность быть созданным используя любой конструктор супер-класса (Alt+Insert). 2. Приоритет у трэдов должен проставляться циклично от минимального значения до максимального значения. 3. если у трэда устан
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (124)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
CyberBoar
Уровень 36, Russian Federation
3 августа, 14:55
Для какой цели нужен пункт 3? Если у тред группы установлен максимальный приоритет, как бы мы не хотели, мы и так не можем установить приоритет треда в такой тред группе выше, чем установленный лимит.
Romanya Java Developer в Региональный Информа
24 июля, 06:31
Для понимания сути: 1) Установить приоритет потоку можно в конструкторе (или блоке инициализации) setPriority(int i); 2) в классе MyThread нужно поле счетчик общее для всех объектов. 3) если для ThreadGroup приоритет ограничен цифрой 7 при попытке задать приоритет потоку из группы цифрой 8 ему задастся приоритет цифрой 7.
The Body of the Atr
Уровень 51
29 апреля, 10:17
Валя не скомпилировала один конструктор, вставленный через Alt+Insert, пришлось удалить его, тогда прокатило. Всего эту задачу решили 6920 учеников.
Aleksey
Уровень 51, Пермь, Россия
1 февраля, 11:31
Все очень просто - НЕстатический блок инициализации, в котором при достижении MAX_PRIORITY сбрасываем счётчик до MIN_PRIORITY. Никаких дополнительных проверок не требуется.
Igor Petrashevsky
Уровень 37
7 июля, 00:13
требуется, для групп.
Александр
Уровень 35, Нижний Новгород, Россия
28 декабря 2021, 14:11
Не получалось решить, пробовал и в каждом конструкторе копипастить и в нестатический блок инициализации выносить. Все равно вывод был неправильный. В итоге подглядел один вариант, который по смыслу был как мой, но в нем не было проверки на то, больше ли значение priority в Thread, чем в его группе. Просто
if (priority > MAX_PRIORITY) priority = MIN_PRIORITY;
        setPriority(priority++);
И этого оказалось достаточно. Валик принял.
Igor Petrashevsky
Уровень 37
7 июля, 00:14
я через % делал, но в правильном решении превышение приоритета , значит 1.
Valerii
Уровень 35, Москва, Россия
16 ноября 2021, 08:44
Возможно я один не понял условия, но оставлю это здесь для таких же. 😎Значение приоритета должно увеличиваться каждый раз, оно не зависит от того есть у потока ThreadGroup или его нет. 😎Если вы выставляете потоку приоритет ThreadGroup, то не забудьте увеличить общий приоритет(ваш счетчик)
Nik Grape
Уровень 48, Berkeley, United States
12 октября 2021, 01:33
вот такого конструктора у вали нет, у кого 16 джава будьте осторожнее, он последним должен быть
public MyThread(ThreadGroup group, Runnable target, String name, long stackSize, boolean inheritThreadLocals)
И на счет максимального приоритета по группе не парьтесь он и так не может его превысить и просто понизиться до приоритета группы
Сонмониус
Уровень 39, Харьков, Ukraine
19 июля, 14:29
Спасибо, помогло
Dmitry Technical Lead
21 сентября 2021, 05:29
Валидатор не понимает аннотации @NotNull, @Nullable, которые вставляет в конструкторы IDEA при Alt+Ins.
LuneFox инженер по сопровождению в BIFIT Expert
27 октября 2021, 02:21
В проекте аннотации можно отключить вроде как.
Максим Дудин
Уровень 39, Калининград
8 сентября 2021, 08:50
Что интересно готовое решение сложней чем моё, с проверкой на "если приоритет выше приоритета группы, то он равен приоритету группы, а если нет, то новому" А я не проверял, и работает как-то само... и проверку прошёл сразу... 1. сначала добавил все конструкторы какие предложил alt+insert 2. затем организовал статический AtomicInteger newPriority равный минимальному приоритету, сначала сделал 1, но испугавшись валидатора (может и зря, всё и так работало) переправил на Thread.MIN_PRIORITY 3. затем организовал public void метод который - устанавливает приоритет с помощью setPriority через newPriority.get() - увеличивает newPriority на 1 - проверяет на "если больше MAX_PRIORITY", то присваиваем MIN_PRIORITY с помощью public boolean compareAndSet (ожидаемое int, обновление int) 4. добавил вызов метода во все конструкторы (не глядя) И оно работает.... (специально продебажил для посмотреть как) когда в случае группы значение приоритета в "методе" становиться больше 7, в группе оно не меняется т.е получается автоматически не может быть выше максимально установленного порога. Потом когда метод отработал и скинул до минимума, опять начинает его присваивать до установленного значения максимума.
Marina Orlova
Уровень 35, Санкт-Петербург
1 декабря 2021, 13:05
Прочла несколько раз все популярные комментарии, но только после вашего все как-то уложилось - возможно, накопительный эффект ) Все сделала аналогично, только пункт 3 не выносила в отдельный метод, поместила этот функционал в динамический блок инициализации (чтобы не дублировать код во всех конструкторах).
Максим Дудин
Уровень 39, Калининград
1 декабря 2021, 16:31
очень рад..🙂
hidden #2595317
Уровень 45
1 декабря 2021, 19:15
Спасибо, друг! Использовал подсказку Марины, и в ифе просто присвоил минимальное значение при равенстве максимальному. И у меня компилятор не принял атомика, заменил на статический инт. Все работает. Надо заметить, что последний конструктор 16 версии баба Валя не принимает.
Максим Глотов
Уровень 35, Новосибирск
5 сентября 2021, 08:41
всего 8 конструкторов, 9й удаляйте.