Приоритеты потоков - 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 – обязательно выставить значение до старта нити?

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

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