Перейти к основному содержимому

Приоритет потока в Java

· 2 мин. чтения

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 для проверки приоритета потока и управления им при необходимости.