Что такое многопоточность 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 метода создания потоков:
- Использование класса потока
- Использование работающего интерфейса
Давайте рассмотрим обе техники одну за другой…
Класс потока
Класс 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.
Приятного обучения!
Ссылка
Авторы
Анкур Раут
Атхарва Пурохит
Рошита Бхонсле
Сакши Сурьяванши
Витика Пунглия