Как создать поток в Java? | Многопоточность в Java

Опубликовано: 2020-12-29

В этой статье мы рассмотрим многопоточность в Java и изучим механизмы, которые делают ее возможной.

Оглавление

Потоки в Java

Функция многопоточности в Java — это легкий подпроцесс. Он считается наименьшей единицей обработки. Это средство достижения многозадачности в программе. Это полезная функция, когда речь идет об играх, анимации и т. д.

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

  1. Расширить класс потока или
  2. Реализовать работающий интерфейс

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

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

Поток может существовать в одном из следующих шести состояний

  1. NEW — как только поток создан, он существует в новом состоянии. По сути, это означает, что поток еще не начал выполнение.
  2. RUNNING — когда поток выполняется или находится в очереди на выполнение, он находится в состоянии выполнения.
  3. ОЖИДАНИЕ — работающий поток иногда останавливается или приостанавливается, чтобы позволить выполнить другое действие. Версия wait() или join() без тайм-аута может приостановить выполнение потока. Как только действие произошло, приостановленный поток возобновляется.
  4. TIMED-WAITING — работающий поток иногда временно останавливается или приостанавливается на определенное время. Например, при вызове функции sleep().
  5. ЗАБЛОКИРОВАН — когда приостановленный поток Java не может получить определенный ресурс, он блокируется и существует в заблокированном состоянии.
  6. TERMINATED — когда поток завершил свое выполнение, он существует в прекращенном состоянии. Однако вы можете завершить поток в любое время.

Узнайте больше об архитектуре и компонентах Java.

Преимущества создания потока в Java

Создание потоков имеет несколько преимуществ. Некоторые из них

  1. Поскольку потоки независимы, одно выполнение не влияет на другое, даже если они работают в общей памяти. Это также означает, что вы можете выполнять более одной операции одновременно.
  2. Многопоточность — это форма многозадачности, которая экономит время.
  3. Ошибка в одном потоке не влияет на другой.

Как создать поток в Java?

Как обсуждалось выше, есть два способа сделать это: расширить класс потока или реализовать работающий интерфейс .

Класс потока

В классе Thread есть конструкторы и методы, которые позволяют выполнять операции, управлять потоками и отслеживать их. Он расширяет класс Object, который затем реализует сопутствующий интерфейс Runnable. Конструкторы, присутствующие в классе потока, это: Thread(), Thread(String name), Thread(Runnable r) и Thread(Runnable r, String name).

Ниже приведены методы и их описания.

Метод Для чего используется?
Начало() Начинает выполнение
бегать() Чтобы запустить действие для потока
спать() Переводит поток в спящий режим на заданное время
присоединиться() Подождите, пока другой поток не будет завершен
получитьПриоритет() Для обозначения приоритета данного потока
Установить приоритет() Чтобы изменить приоритет данного потока
получитьИмя() Чтобы вернуть имя указанного потока
Имя набора() Чтобы изменить имя указанного потока
получить идентификатор () Чтобы вернуть идентификатор данного потока
является живым() Чтобы проверить, существует ли поток в любом из состояний
урожай() Приостанавливает выполнение объекта потока, чтобы разрешить выполнение другого потока (потоков).
приостановить() Чтобы приостановить данный поток
резюме() Чтобы возобновить поток из приостановленного состояния
остановка() Чтобы остановить данный поток
разрушать() Чтобы уничтожить группу потоков и подгруппы
прерывать() Чтобы вызвать прерывание выполнения потока
прерывается() Чтобы проверить, прервано ли выполнение данного потока
прервано() Чтобы проверить, прервано ли текущее выполнение потока
активКаунт() Чтобы вернуть количество активных потоков в группе потоков
удерживать блокировку() Он возвращает true тогда и только тогда, когда текущий поток удерживает блокировку монитора на указанном объекте.
получить состояние() Чтобы определить состояние данного потока
setContextClassLoader() Чтобы установить контекст ClassLoader
получитьContextClassLoader() Чтобы вернуть контекст ClassLoader

Чтобы создать поток, расширив класс Thread, сначала необходимо создать класс, который расширяет класс java.lang.Thread. Этот класс определен для переопределения метода run(). Затем в новом классе создается объект, за которым следует вызов метода start(), чтобы начать выполнение потока.

Обязательно прочтите: шаблонные программы на Java, которые вы должны проверить

Работающий интерфейс

Это самый простой способ создать нить. Для реализации интерфейса Runnable требуется только один метод: run()

Чтобы объявить это, мы пишем

публичный недействительный запуск ()

Внутри run() мы приступаем к написанию кода для создания нового потока.

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

Класс потока и работающий интерфейс

Класс Thread не позволяет вам расширять любой другой класс. Это связано с тем, что в Java невозможно множественное наследование. Однако это не тот случай, когда мы реализуем интерфейс Runnable, где вы продолжаете расширять другие классы.

Расширение класса Thread делает доступными несколько важных методов, расширяющих функциональные возможности потока. Например, yield(), stop(), isalive(), interrupt(). Интерфейс Runnable имеет только метод, который довольно ограничен.

Подведение итогов

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

Получите работу своей мечты

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