Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Java — многопоточность

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

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

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

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

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

Ниже приведены этапы жизненного цикла —

Приоритеты потоков

Каждый поток Java имеет приоритет, который помогает операционной системе определять порядок, в котором запланированы потоки.

Приоритеты потоков Java находятся в диапазоне от MIN_PRIORITY (константа 1) до MAX_PRIORITY (константа 10). По умолчанию каждому потоку назначается приоритет NORM_PRIORITY (константа 5).

Потоки с более высоким приоритетом более важны для программы, и процессорное время должно выделяться перед потоками с более низким приоритетом. Однако приоритеты потоков не могут гарантировать порядок выполнения потоков и очень сильно зависят от платформы.

Создание потока путем реализации запускаемого интерфейса

Если ваш класс предназначен для выполнения в виде потока, вы можете добиться этого, реализуя Runnable интерфейс. Вам нужно будет выполнить три основных шага —

Шаг 1

В качестве первого шага вам необходимо реализовать метод run(), предоставляемый Runnable. интерфейс. Этот метод обеспечивает точку входа для потока, и вы поместите всю свою бизнес-логику в этот метод. Ниже приведен простой синтаксис метода run() —

09

Шаг 2

На втором этапе вы создадите экземпляр потока. объект, используя следующий конструктор —

18

Где threadObj является экземпляром класса, который реализует Runnable интерфейс и threadName имя, присвоенное новому потоку.

Шаг 3

После создания объекта Thread его можно запустить, вызвав start(). метод, который выполняет вызов метода run(). Ниже приведен простой синтаксис метода start () —

26

Пример

Вот пример, который создает новый поток и запускает его —

Живая демонстрация
30

Это даст следующий результат —

Вывод

48

Создать поток, расширив класс потока

Второй способ создать поток — создать новый класс, расширяющий Thread. class, используя следующие два простых шага. Такой подход обеспечивает большую гибкость при обработке нескольких потоков, созданных с использованием доступных методов класса Thread.

Шаг 1

Вам нужно будет переопределить run() метод, доступный в классе Thread. Этот метод обеспечивает точку входа для потока, и вы поместите всю свою бизнес-логику в этот метод. Ниже приведен простой синтаксис метода run() —

56

Шаг 2

Как только объект Thread создан, вы можете запустить его, вызвав start() метод, который выполняет вызов метода run(). Ниже приведен простой синтаксис метода start () —

69

Пример

Вот предыдущая программа, переписанная для расширения потока —

Живая демонстрация
71

Это даст следующий результат —

Вывод

88

Методы потока

Ниже приведен список важных методов, доступных в классе Thread.

<тд>

public void start()

Запускает поток в отдельном пути выполнения, затем вызывает метод run() для этого объекта Thread.

<тд>

public void run()

Если этот объект Thread был создан с использованием отдельной цели Runnable, для этого объекта Runnable вызывается метод run().

<тд>

public final void setName(Имя строки)

Изменяет имя объекта Thread. Существует также метод getName() для получения имени.

<тд>

public final void setPriority(int priority)

Устанавливает приоритет этого объекта Thread. Возможные значения от 1 до 10.

<тд>

public final void setDaemon(boolean on)

Параметр true обозначает этот поток как поток демона.

<тд>

public final void join(длинная миллисекунда)

Текущий поток вызывает этот метод во втором потоке, в результате чего текущий поток блокируется до тех пор, пока второй поток не завершится или не пройдет указанное количество миллисекунд.

<тд>

общее недействительное прерывание()

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

<тд>

public final boolean isAlive()

Возвращает значение true, если поток активен, т. е. в любое время после запуска потока, но до его завершения.

Сер.№ Метод и описание
1
2
3
4
5
6
7
8

Предыдущие методы вызываются для конкретного объекта Thread. Следующие методы в классе Thread являются статическими. Вызов одного из статических методов выполняет операцию над текущим потоком.

<тд>

public static void yield()

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

<тд>

public static void sleep(длительные миллисекунды)

Заставляет текущий запущенный поток блокироваться по крайней мере на указанное количество миллисекунд.

<тд>

public static boolean HoldLock(Object x)

Возвращает true, если текущий поток удерживает блокировку данного объекта.

<тд>

общедоступный статический поток currentThread()

Возвращает ссылку на текущий запущенный поток, который является потоком, вызывающим этот метод.

<тд>

public static void dumpStack()

Выводит трассировку стека для текущего потока, что полезно при отладке многопоточного приложения.

Сер.№ Метод и описание
1
2
3
4
5

Пример

Следующая программа ThreadClassDemo демонстрирует некоторые из этих методов класса Thread. Рассмотрим класс DisplayMessage. который реализует Runnable

98

Ниже приведен еще один класс, который расширяет класс Thread —

105 

Ниже приведена основная программа, в которой используются определенные выше классы —

113

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

Вывод

128

Основные концепции многопоточности в Java

При программировании многопоточности на Java вам понадобятся следующие концепции:

  • Что такое синхронизация потоков?

  • Обработка межпотокового взаимодействия

  • Обработка взаимоблокировки потока

  • Основные операции с потоками


java

  1. Операторы Java
  2. Java-комментарии
  3. Java для каждого цикла
  4. Java-строки
  5. Java-интерфейс
  6. Анонимный класс Java
  7. Java-проба с ресурсами
  8. Java-аннотации
  9. Утверждения Java
  10. Java вектор