1. Введение
В этом руководстве мы обсудим , как планировщик потоков Java выполняет потоки на основе приоритета . Кроме того, мы рассмотрим типы приоритетов потоков в Java.
2. Типы приоритета
В Java приоритет потока — это целое число в диапазоне от 1 до 10. Чем больше целое число, тем выше приоритет. Планировщик потоков использует это целое число из каждого потока, чтобы определить, какой из них должен быть разрешен к выполнению. Класс Thread
определяет три типа приоритетов :
- Минимальный приоритет
- Нормальный приоритет
- Максимальный приоритет
Класс Thread
определяет эти типы приоритетов как константы MIN_PRIORITY
, NORM_PRIORITY
и MAX_PRIORITY
со значениями 1, 5 и 10 соответственно. NORM_PRIORITY
— это приоритет по умолчанию для нового потока
.
3. Обзор выполнения потоков
JVM поддерживает алгоритм планирования, называемый упреждающим планированием с фиксированным приоритетом . Все потоки Java имеют приоритет, и JVM сначала обслуживает поток с наивысшим приоритетом.
Когда мы создаем Thread
, он наследует свой приоритет по умолчанию. Когда несколько потоков готовы к выполнению, JVM выбирает и выполняет исполняемый поток с
наивысшим приоритетом. Если этот поток остановится или станет неработоспособным, будут выполняться потоки с более низким приоритетом. Если два потока имеют одинаковый приоритет, JVM будет выполнять их в порядке FIFO .
Существует два сценария, которые могут привести к запуску другого потока:
- Поток с более высоким приоритетом, чем текущий поток, становится доступным для выполнения
- Текущий поток выходит из состояния выполнения или уступает (временно приостанавливает и разрешает другие потоки)
Как правило, в любой момент времени выполняется поток с наивысшим приоритетом. Но иногда планировщик потоков может выбирать для выполнения потоки с низким приоритетом, чтобы избежать голодания .
4. Знание и изменение приоритета потока
Класс Java Thread
предоставляет методы для проверки приоритета потока и его изменения. Метод экземпляра getPriority()
возвращает целое число, представляющее его приоритет. Метод экземпляра setPriority()
принимает целое число от 1 до 10 для изменения приоритета потока. Если мы передаем значение вне диапазона 1-10, метод выдаст ошибку.
5. Вывод
В этой короткой статье мы рассмотрели, как несколько потоков выполняются в Java на основе приоритета с использованием алгоритма упреждающего планирования. Далее мы изучили диапазон приоритетов и приоритет потока по умолчанию. Также мы проанализировали методы Java для проверки приоритета потока и управления им при необходимости.