JavaRush /Курсы /Java Multithreading /Приоритеты потоков

Приоритеты потоков

Java Multithreading
8 уровень , 5 лекция
Открыта
Приоритеты потоков - 1

— Продолжим наш урок. Что же такое приоритеты нитей и зачем они нужны.

В реальных задачах важность работы разных нитей может сильно различаться. Для контроля этого процесса был придуман приоритет работы. У каждой нити есть такой приоритет – это число от 1 до 10.

10 – это наивысший приоритет.

1 – самый низкий.

Если приоритет не задан, то нить получает приоритет 5 — средний.

Приоритет нити не сильно влияет на ее работу, а носит скорее рекомендательный характер. Если есть несколько спящих нитей, которые нужно запустить, то Java-машина сначала запустит нить с более высоким приоритетом.

Java-машина управляет нитями так, как посчитает нужным. Нити с низким приоритетом не будут простаивать. Просто они будут получать меньше времени, чем другие, но выполняться все равно будут.

В большинстве случаев нити всегда выполняются с одинаковым приоритетом. Попытка дать одной нити больше времени, чем другим, часто указывает на архитектурную ошибку программы.

— Ничего себе. А я уже размечтался, что сейчас назначу нити самый высокий приоритет, и она будет делать в 10 раз больше.

— А тут, оказывается, ситуация – близкая к finalize: нить с высоким приоритетом может и будет работать больше, а может и нет – никто не дает никакой гарантии.

— Кстати, а как поменять приоритет нити?

— Это очень просто. У класса Thread есть два метода:

Метод Описание
void setPriority(int newPriority)
Устанавливает новое значение приоритета
int getPriority()
Возвращает текущий приоритет нити

У класса Thread так же есть три константы:

public final static int MIN_PRIORITY = 1;

public final static int NORM_PRIORITY = 5;

public final static int MAX_PRIORITY = 10;

— Дай, я угадаю. MIN_PRIORITY — это минимальный приоритет, MAX_PRIORITY — максимальный, а NORM_PRIORITY — приоритет по умолчанию?

— Да, именно так. Сможешь сам написать код, который выставляет нити наивысший приоритет.

— А тут есть какой-то подвох? Вроде бы так:

Thread thread = new MyThread();
thread.setPriority(Thread. MAX_PRIORITY)
thread.start();

— Все верно. Ничего сложного да?

— Ага. А можно устанавливать/менять приоритет нити после ее запуска? Или тут как с setDaemon – обязательно выставить значение до старта нити?

— Приоритет можно менять и после старта. Как я уже говорила, кардинальных изменений это не влечет.

— Небольшая, но интересная тема. Спасибо, Элли.

Комментарии (52)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Lafaed Уровень 36
2 мая 2023
Почему так?

Thread thread = new MyThread();
thread.setPriority(Thread. MAX_PRIORITY);
thread.start();
Почему не так?

Thread thread = new MyThread();
thread.setPriority(10);  //  ну или 8, 3 и т.д.
thread.start();
Gans Electro Уровень 42
23 июня 2023
Принцип инкапсуляции или сокрытия. Если в будущем добавят приоритетов до 100, то второй код уже будет давать низкий приоритет. В общем просто от балды
Afanasii Уровень 51
6 июля 2023
спасибо
Gans Electro Уровень 42
17 июля 2023
Рад был помочь
Rolik Уровень 41
25 апреля 2023
JVM все эти приоритеты потоков до *опы. Это как с ThreadGroup - прочесть и забыть.
Андрей Уровень 42
14 апреля 2023
в этой лекции все просто, оно и понятно. в предыдущей лекции все просто, но не понятно. в предыдущей задаче хард все не понятно от того, что не просто.
Lafaed Уровень 36
2 мая 2023
Ничего не понятно, но оно и понятно, и это понятно, главное общее понимание.
Станислав Future Уровень 39
23 августа 2022
Прошлая задача - установите нормальный приоритет для нити. Читаешь документацию, изучаешь, сколько это, нормально, узнаешь что это 5. Следующая лекция - расскажем про приоритет. Нормально - это 5.
FatCat Уровень 51
23 сентября 2022
как-то так))))
Daniel Уровень 51
14 февраля 2023
Никогда такого не было и вот опять)
Zhenya Workout Уровень 43
20 марта 2023
Неужели вы все не можете понять, что это специально так сделано? Гуглил бы ты, если бы уже прочитал это в лекции? Конечно же нет, а ведь гугление это очень важный инструмент, и джавараш этому отлично учит.
Anonymous #3161756 Уровень 40
1 апреля 2023
С одной стороны да, а с другой вспоминается Щербаков:"Это выучишь дома... с отцом..." Я понимаю, что оплатили не очень большие деньги, но все таки платили за систематизацию знаний и информации, а не за возможность поискать информацию на сторонних ресурсах. В будущем, когда будем работать там, придется очень подробно это все изучать. А сейчас нужно, чтобы дали базовые знания, для того чтобы найти первую работу и начать работать.
Igor Petrashevsky Уровень 47
7 июля 2022
Почему MIN_PRIORITY = 1, а не 0? гуманитарненько опять, как с датами.
Dilshod Уровень 36
10 января 2022
В предыдущей задаче уже все мы это узнали, ничего нового, трата времени только
R Sh Уровень 41
19 декабря 2021
наткнулся на похожую статью на JavaRush'е решая предыдущую закачу :-)
Максим Глотов Уровень 35
4 сентября 2021
Это уже норма - сначала задачи, а в следующей лекции объяснить.
11 апреля 2021
— А тут есть какой-то подвох? точку с запитой поставь! и пробел убери между enum.
LuneFox Уровень 41 Expert
26 октября 2021
С запитой и с заеденной.
27 апреля 2025
это не enum а констаты!!!
Aleksandr Уровень 41
29 января 2021
как же это надоело. 0 теории ,сложная задача, потом лекция на то что было уже в пройденной задаче.. зачем так делать?