Жизненный цикл потока в Java
Опубликовано: 2023-01-27Оглавление
Основы потоков Java:
Поток в Java облегчает выполнение нескольких действий внутри одного процесса. Это считается легким процессом. Поток также можно определить как последовательность выполняемых операторов. Каждый поток в Java имеет свой собственный стек, программный счетчик и локальные переменные. Потоки Java также могут быть вложенными последовательностями вызовов методов. Память, состояние каждого процесса и файлы совместно используются потоками.
Использование потоков в Java:
- Для выполнения фоновой или асинхронной обработки
- Для повышения чувствительности приложений с графическим интерфейсом
- Реализовать положительные стороны многопроцессорных систем
- Для упрощения логики программирования в случае существования нескольких
Существует два пути выполнения при вызове потока. Один из двух путей используется для выполнения потока, а другой будет отслеживать оператор, следующий за вызовом потока. Каждый поток в Java имеет отдельное пространство памяти и стек.
Факторы риска, возникающие при использовании потоков в кодах Java, следующие.
- Надлежащая координация между потоками требуется в тех случаях, когда потоки обращаются к общим переменным для согласованного просмотра данных.
- Производительность и обслуживание потоков, если они чрезмерно используются в программах, усложняются.
Жизненный цикл потоков в Java:
В любой момент выполнения программы потоки в Java существуют в любом из перечисленных ниже состояний.
- Новый
- Заблокировано
- Запускаемый
- Время ожидания
- Ожидающий
- Прекращено
Подробное представление жизненного цикла потока в 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 | Он описывает состояние потока, ожидающего из-за вызова одного из следующих методов.
Состояние ожидания может быть связано с завершением конкретной задачи другим потоком. |
Время ожидания | общедоступный статический окончательный Thread.State TIMED_WAITING | Это состояние потока, который ожидает определенное время. Вызов любого из следующих методов приводит к временному состоянию ожидания потока с назначенным положительным временем ожидания.
|
Прекращено | общедоступный статический окончательный 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, практические практические проекты и помощь в трудоустройстве в ведущих фирмах.