Жизненный цикл потока в Java

Опубликовано: 2023-01-27

Оглавление

Основы потоков Java:

Поток в Java облегчает выполнение нескольких действий внутри одного процесса. Это считается легким процессом. Поток также можно определить как последовательность выполняемых операторов. Каждый поток в Java имеет свой собственный стек, программный счетчик и локальные переменные. Потоки Java также могут быть вложенными последовательностями вызовов методов. Память, состояние каждого процесса и файлы совместно используются потоками.

Использование потоков в Java:

    • Для выполнения фоновой или асинхронной обработки
    • Для повышения чувствительности приложений с графическим интерфейсом
    • Реализовать положительные стороны многопроцессорных систем
    • Для упрощения логики программирования в случае существования нескольких

Существует два пути выполнения при вызове потока. Один из двух путей используется для выполнения потока, а другой будет отслеживать оператор, следующий за вызовом потока. Каждый поток в Java имеет отдельное пространство памяти и стек.

Факторы риска, возникающие при использовании потоков в кодах Java, следующие.

  • Надлежащая координация между потоками требуется в тех случаях, когда потоки обращаются к общим переменным для согласованного просмотра данных.
  • Производительность и обслуживание потоков, если они чрезмерно используются в программах, усложняются.

Жизненный цикл потоков в Java:

В любой момент выполнения программы потоки в Java существуют в любом из перечисленных ниже состояний.

  1. Новый
  2. Заблокировано
  3. Запускаемый
  4. Время ожидания
  5. Ожидающий
  6. Прекращено

Подробное представление жизненного цикла потока в Java

Новый поток:

Вновь созданный поток находится в состоянии «Новый». Это не прогрессирует для запуска в этом состоянии. Выполнение кода потока в новом состоянии еще не произошло. Это еще предстоит запустить.

Запускаемое состояние:

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

Ознакомьтесь с нашими бесплатными технологическими курсами, чтобы получить преимущество над конкурентами.

Изучите наши популярные курсы по программной инженерии

Магистр компьютерных наук LJMU и IIITB Программа сертификатов кибербезопасности Caltech CTME
Учебный курс по полной разработке стека Программа PG в блокчейне
Программа Executive PG в Full Stack Development
Посмотреть все наши курсы ниже
Курсы по разработке программного обеспечения

Состояние ожидания/блокировки:

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

  • Ожидающий
  • Заблокировано

Поток, ожидающий завершения ввода-вывода, находится в заблокированном состоянии. Функция планировщика потоков заключается в планировании выполнения заблокированного или ожидающего потока путем его повторной активации. Любой поток в этом состоянии не допускается к дальнейшему продолжению выполнения до тех пор, пока он не будет преобразован в работоспособное состояние. Потоки в состоянии блокировки или ожидания не используют цикл ЦП.

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

Время ожидания:

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

Прекращенное состояние:

Завершение потоков происходит по любой из следующих причин.

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

Поток в завершенном состоянии не потребляет никаких циклов ЦП.

Изучайте онлайн-курсы по разработке программного обеспечения в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.

Востребованные навыки разработки программного обеспечения

Курсы JavaScript Базовые курсы Java Курсы по структурам данных
Курсы Node.js Курсы SQL Курсы разработки полного стека
Курсы НФТ Курсы DevOps Курсы по большим данным
Курсы React.js Курсы по кибербезопасности Курсы облачных вычислений
Курсы по проектированию баз данных Курсы Python Курсы по криптовалюте

Реализация состояний потока в Java:

Чтобы получить текущее состояние потока в Java, мы используем метод Thread.getState(). Java также предлагает класс java.lang.Thread.State, в котором определены константы ENUM для состояния потока. Подробности приведены в таблице ниже.

Постоянный тип Декларация Описание
Новый public static final Thread.State NEW Это состояние потока, который только что создан и еще не начал свое выполнение.
Запускаемый public static final Thread.State RUNNABLE Он описывает состояние уже запущенного потока или потока, который находится в состоянии готовности к выполнению.

Один и тот же поток может находиться в состоянии выполнения для виртуальной машины Java и в состоянии ожидания для других ресурсов операционной системы, таких как процессор.

Заблокировано общедоступный статический окончательный Thread.State BLOCKED Он описывает состояние заблокированного потока в ожидании блокировки монитора. Он остается в том же состоянии до тех пор, пока блок монитора не войдет в синхронизированный метод/блок или повторно не войдет в синхронизированный метод после вызова Object.wait().
Ожидающий public static final Thread.State WAITING Он описывает состояние потока, ожидающего из-за вызова одного из следующих методов.

  1. Object.wait без тайм-аута
  2. LockSupport.park
  3. Thread.join без тайм-аута

Состояние ожидания может быть связано с завершением конкретной задачи другим потоком.

Время ожидания общедоступный статический окончательный Thread.State TIMED_WAITING Это состояние потока, который ожидает определенное время. Вызов любого из следующих методов приводит к временному состоянию ожидания потока с назначенным положительным временем ожидания.

  1. Thread.join с тайм-аутом
  2. Object.wait с тайм-аутом
  3. LockSupport.partUntil
  4. LockSupport.parkNanos
Прекращено общедоступный статический окончательный Thread.State TERMINATED Это состояние потока, который завершил выполнение составляющих его операторов кода.

Поток находится в состоянии NEW, когда он только что создан. Когда метод .start() вызывается в потоке, планировщик потоков переводит его в состояние Runnable. Когда метод join() вызывается для экземпляра потока, поток, который в данный момент выполняет оператор кода, будет ожидать завершения этого потока. Таким образом, до вывода окончательного оператора на консоль функция join() вызывается программой в потоке 2 и удерживает поток 1 в ожидании, пока поток 2 не завершит свое выполнение и не перейдет в состояние «Завершено». Поскольку поток1 ожидает завершения выполнения потока2, он переводится в состояние ОЖИДАНИЕ.

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

Как реализовать абстракцию данных в Java? Что такое внутренний класс в Java? Идентификаторы Java: определение, синтаксис и примеры
Понимание инкапсуляции в ООП на примерах Объяснение аргументов командной строки в C 10 основных функций и характеристик облачных вычислений в 2022 году
Полиморфизм в Java: концепции, типы, характеристики и примеры Пакеты в Java и как их использовать? Учебник по Git для начинающих: Изучайте Git с нуля

Достоинства и ограничения использования потоков в программах Java:

Использование потоков в программах Java имеет следующие преимущества.

  • Сокращение времени, затрачиваемого на разработку кода
  • Снижение затрат на техническое обслуживание
  • Улучшенная производительность сложных приложений
  • Повышение отзывчивости пользовательских интерфейсов
  • Распараллеливание задач
  • Потоки используются в серверных приложениях для повышения пропускной способности и использования ресурсов.
  • Если все вычислительные ресурсы ЦП не могут быть использованы потоком, выполнение другого потока будет поддерживать их занятость.
  • Если один и тот же набор данных обрабатывается несколькими потоками, их кеш может быть общим. Это приводит к лучшему использованию кеша или согласованию его значений.

Есть несколько недостатков использования потоков в программах Java. Некоторые из них перечислены ниже.

  • При совместном использовании кэшей, резервных буферов трансляции (TLB) или любых других аппаратных ресурсов несколько потоков могут мешать друг другу.
  • Даже когда работает только один поток, время выполнения потока не может быть увеличено. Однако допускается ухудшение времени выполнения. Это может быть связано с дополнительными каскадами конвейера и/или более медленными частотами, необходимыми для размещения аппаратного обеспечения переключения потоков.
  • Многочисленные изменения требуются как в операционных системах, так и в прикладных программах по сравнению с многопроцессорной обработкой, потому что аппаратная поддержка больше зависит от программного обеспечения в многопоточности.

Если вам интересно узнать больше о Java, разработке программного обеспечения с полным стеком, ознакомьтесь с программой Executive PG upGrad и IIIT-B по разработке программного обеспечения — специализация в разработке полного стека, которая предназначена для работающих профессионалов и предлагает более 500 часов интенсивного обучения. , более 9 проектов и заданий, статус выпускника IIIT-B, практические практические проекты и помощь в трудоустройстве в ведущих фирмах.

Хотите поделиться этой статьей?

Подготовьтесь к карьере будущего

Подать заявку на получение степени магистра в области разработки программного обеспечения