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

Давайте разберемся, что такое многопоточность на примере, допустим, вы работаете в браузере, здесь мы можем работать с несколькими вкладками одновременно. Мы можем начать рендеринг веб-страницы и по-прежнему сможем загружать другие страницы. Здесь процессор создает два разных потока для одновременного выполнения обеих задач, каждый поток ведет себя как отдельный процесс, который выполняется в отдельном блоке.

Таким образом, многопоточность означает одновременное выполнение нескольких потоков. Это помогает нам добиться параллелизма в программах. Выполнение нескольких потоков одновременно называется многопоточностью в Java.

Почему многопоточность?

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

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

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

  • Новый — Также известный как рожденный поток, здесь новый поток начинает свой жизненный цикл в новом состоянии. Он остается в этом состоянии до тех пор, пока программа не запустит поток.
  • Работающий — когда создается новый поток, этот поток становится работоспособным. В этом состоянии поток можно рассматривать как выполняющий свои задачи.
  • Ожидание — в ожидании поток ожидает, пока дополнительный поток выполнит задачу. Поток переходит обратно в рабочее состояние; только другой поток сигнализирует ожидающему потоку о продолжении выполнения.
  • Ожидание по времени — готовый к выполнению поток перейдет в обычное состояние ожидания на фиксированный интервал вашего времени. Поток во время этого состояния переходит обратно в рабочее состояние по истечении этого интервала или после того, как произойдет событие, которого он ожидает.
  • Завершен (мертв) – исполняемый поток переходит в состояние завершения после завершения своей задачи или иным образом завершается.

Основной поток Java

Как мы знаем, основной метод — это точка входа при выполнении программы. JVM выполняет программу и создает поток для ее запуска, этот поток известен как основной поток в java.

Некоторые важные моменты:

  • Основной поток автоматически создается JVM при запуске выполнения программы.
  • Они являются родительским потоком, из которого порождаются другие дочерние потоки.
  • Это должен быть последний поток, чтобы завершить выполнение, поскольку он выполняет различные варианты завершения работы других потоков в нем. Когда этот поток останавливается, вся программа перестает работать.
  • Основной поток должен быть завершен, наконец, когда запущено несколько потоков. Если вы вызываете метод join из основного потока, программа заходит в тупик.
class ExampleMainThread
{
   public static void main(String args[])
   {
        Thread obj = Thread.currentThread();
        System.out.println(“Name of thread :” +obj.getName());
        System.out.println(“Priority of thread :” +obj.getPriority());
        // We can set the Name of main thread
        obj.setName(“Main thread”);
        System.out.println(“Name of thread :” +obj.getName());
        System.out.println(“Happy Learning”);
  }
}

Вывод:

Название темы: основная

Приоритет темы: 5

Название темы: Основная тема

Счастливого обучения

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

В java есть 2 метода создания потоков:

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

Давайте рассмотрим обе техники одну за другой…

Класс потока

Класс Thread предоставляет конструкторы и методы для создания и выполнения операций над потоком. Класс Thread расширяет класс Object и реализует интерфейс Runnable.

Обычно используемые конструкторы класса Thread:

  • Нить()
  • Тема (имя строки)
  • Поток (Runnable r)
  • Thread(Runnable r, имя строки)

Часто используемые методы класса Thread:

  • public void run(): выполняет различные действия в потоке.
  • public void start(): запускает выполнение потока. JVM вызывает метод run() в потоке.
  • public void sleep(длинные миллисекунды): переводит выполняемый в данный момент поток в спящий режим (временно прекращает выполнение) на указанное количество миллисекунд.
  • public void join(): ожидает завершения потока.
  • public void join(длинные миллисекунды): ожидает завершения потока в течение указанных миллисекунд.
  • public int getPriority(): возвращает приоритет потока.
  • public int setPriority(int priority): изменяет приоритет потока.
  • public String getName(): возвращает имя потока.
  • public void setName(String name): изменяет имя потока.
  • public Thread currentThread(): возвращает ссылку на исполняемый в данный момент поток.
  • public int getId(): возвращает идентификатор потока.
  • public Thread.State getState(): возвращает состояние потока.
  • public boolean isAlive(): проверяет, жив ли поток.
  • public void yield(): временно приостанавливает текущий исполняемый объект потока и разрешает выполнение других потоков.
  • public void suspend(): используется для приостановки потока (устарело).
  • public void restore(): используется для возобновления приостановленного потока (устарело).
  • public void stop(): используется для остановки потока (устарело).
  • public boolean isDaemon(): проверяет, является ли поток потоком демона.
  • public void setDaemon(boolean b): помечает поток как демон или пользовательский поток.
  • public void interrupt(): прерывает поток.
  • public boolean isInterrupted(): проверяет, был ли поток прерван.
  • public static boolean interrupted(): проверяет, был ли текущий поток прерван.

Запускаемый интерфейс

Интерфейс Runnable должен быть реализован любым классом, экземпляры которого предназначены для выполнения потоком. Запускаемые интерфейсы имеют только один метод с именем run().

public void run(): используется для выполнения действия для потока

Заключение

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

Приятного обучения!

Ссылка









Авторы

Анкур Раут

Атхарва Пурохит

Рошита Бхонсле

Сакши Сурьяванши

Витика Пунглия