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

Этот блог познакомит вас со всеми концепциями потоков Java, которые многим людям кажутся сложными в использовании и понимании. Итак, давайте начнем тогда, не так ли?

В этом блоге Java Thread я бы рассмотрел следующие темы:

  1. Что такое потоки в Java?
  2. Модель потока Java
  3. Многопоточность в Java
  4. Основной поток Java
  5. Как создать поток Java?

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

Прежде чем мы перейдем к первой теме этого блога Java Thread, рассмотрим следующий пример:

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

  • Чтобы загрузить последние цены опционов на акции
  • Проверить цены на предупреждения
  • Анализировать исторические данные для компании XYZ

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

Теперь, если исторический анализ занимает полчаса, а пользователь выбирает загрузку и последующую проверку, в результате предупреждение может прийти слишком поздно, чтобы покупать или продавать акции. Мы только что представили приложение, которое требует многопоточности. В идеале загрузка должна происходить в фоновом режиме (то есть в другом потоке). Таким образом, другие процессы могут происходить одновременно, так что, например, предупреждение может быть передано мгновенно. Все это время пользователь взаимодействует с другими частями приложения. Анализ также может выполняться в отдельном потоке, чтобы пользователь мог работать с остальной частью приложения, пока вычисляются результаты.

Здесь помогает поток Java. Давайте сначала разберемся с Java Thread:

Что такое потоки в Java?

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

Следующая концепция в этом блоге о потоках Java является неотъемлемой частью концепции потоков и многопоточности.

Модель потоков Java. Зачем использовать потоки в Java?

Система времени выполнения Java во многом зависит от потоков. Потоки уменьшают неэффективность, предотвращая потерю циклов ЦП.

Потоки существуют в нескольких состояниях. Ниже приведены эти состояния:

  • Новый — когда мы создаем экземпляр класса Thread, поток находится в новом состоянии.
  • Runnable —поток Java находится в рабочем состоянии.
  • Приостановлено. Работающий поток может быть приостановлен, что временно приостанавливает его активность. Затем приостановленный поток можно возобновить, что позволит продолжить его с того места, где он остановился.
  • Заблокировано — поток Java может быть заблокирован при ожидании ресурса.
  • Завершен. Поток может быть прерван, что немедленно останавливает его выполнение в любой момент времени. После завершения потока его нельзя возобновить.

Итак, это все о состояниях Java Thread. Теперь давайте перейдем к самой важной теме потоков Java, то есть к классу потока и запускаемому интерфейсу. Мы обсудим это один за другим ниже.

Многопоточность в Java: как работают потоки Java?

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

Многопоточная система Java построена на классе Thread, его методах и сопутствующем интерфейсе Runnable. Чтобы создать новый поток, ваша программа либо расширит Thread, либо реализует Runnable интерфейс.

Класс Thread определяет несколько методов, помогающих управлять потоками. В таблице ниже показано то же самое:

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

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

Теперь давайте посмотрим, как использовать интерфейс Thread and Runnable для создания потоков и управления ими, начиная с основного потока Java, который есть во всех программах Java. Итак, давайте обсудим основную тему.

Почему основной поток так важен?

  • Поскольку этот поток влияет на другие «дочерние» потоки
  • Потому что он выполняет различные действия по выключению
  • Он создается автоматически при запуске вашей программы.

Итак, это была основная тема. Давайте посмотрим, как мы можем создать java-поток?

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

Java позволяет создавать поток двумя способами:

Давайте посмотрим, как оба способа помогают в реализации потока Java.

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

Самый простой способ создать поток — создать класс, реализующий интерфейс Runnable.

Чтобы реализовать интерфейс Runnable, класс должен реализовать только один метод с именем run(), который объявлен следующим образом:

public void run( )

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

Пример:

public class MyClass implements Runnable {
public void run(){
System.out.println("MyClass running");
}
}

Чтобы выполнить метод run() потоком, передайте экземпляр MyClass потоку в его конструкторе (конструктор в Java — это блок кода, аналогичный методу, который вызывается, когда создается экземпляр объекта). Вот как это делается:

Thread t1 = new Thread(new MyClass ());
t1.start();

Когда поток запускается, он вызывает метод run() экземпляра MyClass вместо выполнения собственного метода run(). В приведенном выше примере будет напечатан текст ' MyClass running '.

Расширение потока Java

Второй способ создать поток — создать новый класс, который расширяет Thread, затем переопределить метод run(), а затем создать экземпляр этого класса. Метод run() — это то, что выполняется потоком после вызова start(). Вот пример создания подкласса Java Thread:

public class MyClass extends Thread {
public void run(){
System.out.println("MyClass running");
}
}

Чтобы создать и запустить указанный выше поток, вы можете сделать следующее:

MyClass t1 = new MyClass ();
T1.start();

Когда метод run() выполняется, он выводит текст ' MyClass running'.

До сих пор мы использовали только два потока: основной поток и один дочерний поток. Однако наша программа может воздействовать на столько потоков, сколько ей нужно. Давайте посмотрим, как мы можем создать несколько потоков.

Создание нескольких потоков

class MyThread implements Runnable {
String name;
Thread t;
MyThread (String thread){
name = threadname;
t = new Thread(this, name);
System.out.println("New thread: " + t);
t.start();
}
public void run() {
try {
for(int i = 5; i > 0; i--) {
System.out.println(name + ": " + i);
Thread.sleep(1000);
}
}catch (InterruptedException e) {
System.out.println(name + "Interrupted");
}
System.out.println(name + " exiting.");
}
}
class MultiThread {
public static void main(String args[]) {
new MyThread("One");
new MyThread("Two");
new NewThread("Three");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
System.out.println("Main thread Interrupted");
}
System.out.println("Main thread exiting.");
}
}}
The output from this program is shown here:

New thread: Thread[One,5,main]
 New thread: Thread[Two,5,main]
 New thread: Thread[Three,5,main]
 One: 5
 Two: 5
 Three: 5
 One: 4
 Two: 4
 Three: 4
 One: 3
 Three: 3
 Two: 3
 One: 2
 Three: 2
 Two: 2
 One: 1
 Three: 1
 Two: 1
 One exiting.
 Two exiting.
 Three exiting.
 Main thread exiting.

Вот как работает многопоточность в java. На этом мы подошли к концу блога Java Thread.

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

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

1. Объектно-ориентированное программирование

2. Наследование в Java

3. Полиморфизм в Java

4. Абстракция в Java

5. Строка Java

6. Массив Java

7. Коллекции Java

8. Java-потоки

9. Введение в сервлеты Java

10. Учебник по сервлетам и JSP

11. Обработка исключений в Java

12. Учебник по Java

13. Вопросы для собеседования по Java

14. Java-программы

15. Котлин против Java

16. Внедрение зависимостей с использованием Spring Boot

17. Сопоставимо в Java

18. 10 лучших фреймворков Java

19. Java Reflection API

20. 30 лучших шаблонов в Java

21. Основная шпаргалка по Java

22. Программирование сокетов на Java

23. Шпаргалка по ООП по Java

24. Аннотации в Java

25. Проект системы управления библиотекой на Java

26. Деревья в Java

27. Машинное обучение в Java

28. Основные структуры данных и алгоритмы в Java

29. Навыки Java-разработчика

30. 55 самых популярных вопросов на собеседовании по сервлетам

31. Лучшие Java-проекты

32. Шпаргалка по строкам Java

33. Вложенный класс в Java

34. Вопросы и ответы на собеседование по Java Collections

35. Как справиться с взаимоблокировкой в ​​Java?

36. 50 главных вопросов на собеседовании по коллекциям Java, которые вам нужно знать

37. Какова концепция пула строк в Java?

38. В чем разница между C, C++ и Java?

39. Палиндром в Java — Как проверить число или строку?

40. Главные вопросы и ответы на собеседованиях по MVC, которые вам нужно знать

41. 10 лучших приложений языка программирования Java

42. Тупик в Java

43. Квадратный корень в Java

44. Приведение типов в Java

45. Операторы в Java и их типы

46. Деструктор в Java

47. Двоичный поиск в Java

48. Архитектура MVC в Java

49. Вопросы и ответы на собеседовании в Hibernate

Первоначально опубликовано на сайте ww.edureka.co 30 сентября 2021 г.