Перед введенням концепція нитки , ми не змогли запустити більше ніж одне завдання паралельно. Це був недолік, і щоб усунути цей недолік, Концепція потоку було введено.
А Нитка це дуже легкий процес, або, можна сказати, найменша частина процесу, яка дозволяє програмі працювати ефективніше, запускаючи кілька завдань одночасно.
масив рядків мовою c
Для виконання складних завдань у фоновому режимі ми використовували Концепція потоку в Java . Всі завдання виконуються без порушення основної програми. У програмі чи процесі всі потоки мають свій окремий шлях для виконання, тому кожен потік процесу є незалежним.
Ще одна перевага використання нитка полягає в тому, що якщо потік отримує виняток або помилку під час свого виконання, це не впливає на виконання інших потоків. Усі потоки мають спільну пам'ять і мають власний стек, локальні змінні та програмний лічильник. Коли кілька потоків виконуються паралельно одночасно, цей процес називається Багатопотоковість .
Простіше кажучи, нитка - це:
- Функція, за допомогою якої ми можемо виконувати кілька дій в рамках одного процесу.
- Легкий процес.
- Серія виконаних операторів.
- Вкладена послідовність викликів методів.
Модель потоку
Як і процес, потік існує в кількох станах. Ці стани такі:
1) Новий (готовий до запуску)
Потік є новий коли він отримує процесорний час.
2) Біг
Потік є a Біг стан, коли він знаходиться на виконанні.
3) Підвішений
Нитка знаходиться в Підвішено стан, коли він тимчасово неактивний або виконується.
масив об'єктів java
4) Заблоковано
Нитка знаходиться в заблоковано стан, коли він очікує на ресурси.
5) Припинено
Потік переходить у цей стан, коли в будь-який момент часу він негайно зупиняє своє виконання.
Створення потоку
Потік створюється шляхом «створення або реалізації» Запускний інтерфейс або шляхом розширення Клас ниток . Це єдині два способи, якими ми можемо створити потік.
Давайте зануримося в подробиці обох цих способів створення потоку:
Клас потоку
А Клас ниток має кілька методів і конструкторів, які дозволяють нам виконувати різні операції над потоком. Клас Thread розширює Об'єкт клас. The Об'єкт клас реалізує Працездатний інтерфейс. Клас потоку має наступні конструктори, які використовуються для виконання різних операцій.
Виконуваний інтерфейс (метод run())
Інтерфейс Runnable повинен бути реалізований тим класом, екземпляри якого призначені для виконання потоком. Запускний інтерфейс дає нам запустити() метод виконання дії для потоку.
java карти
метод start().
Метод використовується для запуску новоствореного потоку. Він починає новий потік із новим стеком викликів. Після виконання початок() метод, потік змінює стан із New на Runnable. Він виконує метод run(). коли потік отримує правильний час для його виконання.
Розглянемо приклад, щоб зрозуміти, як ми можемо створити a Java потік шляхом розширення класу Thread:
ThreadExample1.java
// Implementing runnable interface by extending Thread class public class ThreadExample1 extends Thread { // run() method to perform action for thread. public void run() { int a= 10; int b=12; int result = a+b; System.out.println('Thread started running..'); System.out.println('Sum of two numbers is: '+ result); } public static void main( String args[] ) { // Creating instance of the class extend Thread class ThreadExample1 t1 = new ThreadExample1(); //calling start method to execute the run() method of the Thread class t1.start(); } }
Вихід:
Створення потоку шляхом реалізації виконуваного інтерфейсу
У Java ми також можемо створити потік, реалізувавши виконуваний інтерфейс. Виконуваний інтерфейс надає нам як метод run(), так і метод start().
Давайте розглянемо приклад, щоб зрозуміти, як ми можемо створити, запустити та запустити потік, використовуючи доступний для виконання інтерфейс.
ThreadExample2.java
class NewThread implements Runnable { String name; Thread thread; NewThread (String name){ this.name = name; thread = new Thread(this, name); System.out.println( 'A New thread: ' + thread+ 'is created ' ); thread.start(); } public void run() { try { for(int j = 5; j > 0; j--) { System.out.println(name + ': ' + j); Thread.sleep(1000); } }catch (InterruptedException e) { System.out.println(name + ' thread Interrupted'); } System.out.println(name + ' thread exiting.'); } } class ThreadExample2 { public static void main(String args[]) { new NewThread('1st'); new NewThread('2nd'); new NewThread('3rd'); try { Thread.sleep(8000); } catch (InterruptedException excetion) { System.out.println('Inturruption occurs in Main Thread'); } System.out.println('We are exiting from Main Thread'); } }
Вихід:
У наведеному вище прикладі ми виконуємо багатопотоковість, реалізуючи запущений інтерфейс. Щоб дізнатися більше про багатопотоковість, натисніть тут .