Объяснение многопоточности в Java [с примерами]

Опубликовано: 2021-06-15

Оглавление

Потоки в Java

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

В то время как потоки разделяют ресурс с ресурсом процесса и существуют с ним. В каждом Java-приложении присутствует по крайней мере один поток, который называется основным потоком. Из основного потока можно создать несколько потоков. Узнайте больше о том, как создать поток в Java.

Преимущества потока Java

  • Для создания потока требуется меньше времени и ресурсов по сравнению с процессами. Поэтому потоки также называют легковесными процессами.
  • Данные и код родительского процесса совместно используются потоками.
  • Взаимодействие между потоками проще, чем взаимодействие в процессе.
  • Потоки в Java можно создавать с помощью реализации java.lang. Работающий интерфейс.

Один поток

В программе присутствует несколько процессорных блоков, самый маленький из которых называется одиночным потоком. Благодаря использованию «класса потоков» Java применяет потоки. Существуют два типа резьбы; поток демона и поток пользователя.

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

Преимущества одинарного потока:

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

Многозадачность в Java

Многозадачность относится к процессу выполнения нескольких задач процессором одновременно. Иногда переключение ЦП может выполняться пользователем между задачами для совместной работы с каждой программой. В многозадачности процессам выделяется отдельная память и ресурсы. Двумя способами можно добиться многозадачности.

1. Многопроцессорность (многозадачность на основе процессов)

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

2. Многопоточность (многозадачность на основе потоков)

  • Один и тот же адрес распределяется между потоками.
  • Нитки легкие.
  • Существует низкая стоимость связи между потоками.

Что такое многопоточность?

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

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

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

В анимации, играх используется многопоточность Java . Нажмите, если хотите узнать больше об архитектуре и компонентах Java.

Для создания потоков можно использовать два механизма.

1. Расширение класса потока

2. Реализация работающего интерфейса

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

  • Расширение класса Thread не может расширять другие классы, поскольку в Java не поддерживается множественное наследование. Но с реализацией интерфейса «Runnable» другие базовые классы могут быть расширены из класса.
  • Базовая функциональность потока может быть расширена за счет расширения класса Thread, поскольку предоставляются встроенные методы, такие как interrupt(), yield() и т. д.
  • Объект, который могут совместно использовать несколько потоков, будет предоставлен при использовании runnable.

Класс потока Java

Программирование потоков в Java достигается с помощью класса потока. Конструкторы предоставляются классом потока и методами для выполнения операций потока. Класс потока реализует работающий интерфейс и расширяет класс Object.

Несколько распространенных методов обработки потоков:

  1. start(): выполнение потока запускается этим методом. Метод run() вызывается JVM.
  2. sleep(int миллисекунды): выполнение потока приостанавливается на миллисекунды, которые предоставляются, так как процесс потока переводится в спящий режим с помощью этого метода. После паузы выполнение потока начинается снова. С помощью этого метода можно синхронизировать потоки.
  3. getName(): через этот метод возвращается имя потока.
  4. setPriority(int new priority): С помощью этого метода изменяется приоритет потока.
  5. yield (): Текущий поток останавливается с выполнением других потоков с помощью этого метода.
  6. run(): метод для запуска действия в потоке.
  7. getPriority(): с помощью этого метода возвращается приоритет потока.
  8. setName(): имя потока изменяется с помощью этого метода.
  9. getId(): через этот метод возвращается идентификатор потока.
  10. suspend(): поток приостанавливается с помощью этого метода.

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

Жизненный цикл потока имеет несколько этапов, которые перечислены ниже:

  1. Новое: «Класс потока» используется для создания потока на этом этапе. Пока поток не запущен, программа остается на этом этапе. Метод также называют рожденной нитью.
  2. Runnable: метод start вызывает экземпляр потока на этом этапе жизненного цикла потока. Планировщику передается управление потоком для завершения выполнения. Должен ли поток выполняться или нет, зависит от планировщика.
  3. Выполнение: как только выполнение потока запущено, этап переходит к этапу «выполняется». Один поток выбирается планировщиком из пула потоков и запускает выполнение приложения.
  4. Ожидание : как следует из названия, на этом этапе жизненного цикла поток ожидает. Синхронизация потоков необходима из-за запуска нескольких потоков в приложении. Следовательно, потоку необходимо ждать, пока не завершится выполнение другого потока. Поэтому этап жизненного цикла также известен как этап ожидания.
  5. Мертвый: Стадия, на которой происходит завершение потока, называется «мертвой» стадией. Как только поток переходит из состояния выполнения в конец обработки, он завершается и, следовательно, находится в «мертвом состоянии».

Синхронизация потоков в Java

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

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

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

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

Преимущества многопоточности

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

Пример многопоточности

Пример многопоточной программы на java показан ниже:

Источник

Рисунок 1: Фрагмент примера многопоточного кода

Объяснение кода

Строка 3: Класс GuruThread1 реализует runnable.

Строка 8: отображает основной метод класса.

Строка 9: создается экземпляр класса потока, создается экземпляр «guruThread1» и создается поток.

Строка 10: создается экземпляр «класса Thread», экземпляр «guruThread2» и поток.

Строка 11: запущен поток с именем guruThread1.

Строка 12: запущен поток с именем guruThread2.

Строка 13: выводится текст «Имена потоков следующие:».

Строка 14: Метод getName() используется для получения имени потока1.

Строка 15: Метод getName() используется для получения имени потока2.

Выполнение приведенного выше кода приводит к следующему выводу:

Источник

Рис.: Скриншот вывода, сгенерированного программой многопоточности на Java (взято из

Заключение

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

Если вы заинтересованы в овладении навыками программирования по доступной цене и готовы к работе в отрасли, вы можете проверить курс, предлагаемый upGrad «Магистр наук в области компьютерных наук». Он предназначен для всех специалистов среднего звена в возрастной группе от 21 до 45 лет. Курс сертифицирован Ливерпульским университетом Джона Мура и рассчитан на более чем 500 часов обучения, 309 проектов и заданий, чтобы максимально раскрыть ваши способности. Если у вас есть какие-либо вопросы, напишите нам сообщение, наша команда свяжется с вами.

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

Подать заявку на участие в программе Executive PG по разработке программного обеспечения от IIIT-B