public MyThread(ThreadGroup group, String name) {
super(group, name);
if (numberPriority.get() > MAX_PRIORITY) {
numberPriority.set(1);
}
/*if (group.getMaxPriority() < getPriority()) {
setPriority(group.getMaxPriority());
}
else {
setPriority(numberPriority.get());
numberPriority.getAndIncrement();
}*/
setPriority(numberPriority.get());
System.out.println(getPriority());
numberPriority.getAndIncrement();
}
Вот рабочий код прошедший валидацию, но почему он работает и дебаг проводил, так и не понял. Суть задачи создавая трэд с группой трэдов в которой он есть, вводить такой приоритет для трэда который не будет превосходить максимальный для группы. И так получается в данном куске кода, что работает все даже без той части что закомментирована. Для группы данной здесь максимальный приоритет 7, а здесь вводятся setPriority(numberPriority.get()) значения и 8 и 9 и 10, но System.out.println(getPriority()) показывает при значениях которые устанавливаютя в set от 8 и выше, все равно 7. Почему?! Или если изначально установлено group.setMaxPriority(7), то если заполнять трэдами приоритетами выше 7 в данном случае, например setPriority(10), то все равно приоритет трэда автоматически становится максимальным, то есть 7 для текущей группы. Тогда смысл задачи эту дополнительную проверку делать, когда механизм и так встроен.
И. Ж.
41 уровень
Не доганяю в упор все равно! Задачу подогнал в итоге под валидацию, уже разбавляя свой код с кодом чужим, в разделе данном.
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
FutureDevJava Student в Home Corporation ®
19 марта 2023, 14:03решение
В задаче есть два вывода-примера, чтобы понять что от нас хотят.
С первым всё понятно "1 2 3 4 5 6 7 8 9 10 1 2" - приоритет циклично увеличивается от 1 до 10.
А вот второй: "3 4 5 6 7 7 7 7 1 2 3 4". Здесь приоритет также циклично увеличивается от 1 до 10, но не привышая максимальный приоритет группы.
Т.е. getAndIncrement() или incrementAndGet() (в зависимости от Вашей реализации) должен быть всегда, на каждом витке цикла. А сброс к единице, только после десяти витков.
У Вас же первый if-блок сбрасывает приоритет к единице при достижении максимального значения группы.
Следовательно, мы получим иной от требуемого вывод, а именно "3 4 5 6 7 1 2 3 4 5 6 7"
P.S. тоже на эти грабли наступил, когда решал 😅
+2
И. Ж.
21 марта 2023, 15:16
Да спасибо! Пришлось повозиться с задачкой. Но здесь получается, что правильный вывод
"3 4 5 6 7 7 7 7 1 2 3 4" будет даже при только таком коде:
public MyThread(ThreadGroup group, String name) {
super(group, name);
if (numberPriority.get() > MAX_PRIORITY) {
numberPriority.set(1);
}
setPriority(numberPriority.get());
System.out.println(getPriority());
numberPriority.getAndIncrement();
}
То есть даже когда вводим допустим "setPriority(10)", на выходе будет 7! То есть фактически проверка " if (group.getMaxPriority() < getPriority()) " нужна только для валидатора, там автоматически в группе не будет трэда с приоритетом больше допустимого..
+1
FutureDevJava Student в Home Corporation ®
21 марта 2023, 19:25
Да, Вы правы. Java-машина не поставит приоритет потока выше, чем приоритет его группы. Задание похоже на одну из прошлых задач. Там также просили руками прописать что новосозданный поток "не демон и имеет нормальный приоритет (5)", хотя это как-бы стандартные настройки, которые сами применяются при создании потока (если мы чего-то другого не укажем).
0