logo

Многопоточност в Java

  1. Многопоточност
  2. Многозадачност
  3. Многозадачност, базирана на процеси
  4. Многозадачност, базирана на нишки
  5. Какво е Thread

Многопоточност в Java е процес на изпълнение на множество нишки едновременно.

Нишката е лек подпроцес, най-малката единица за обработка. Многопроцесорна и многонишкова обработка, и двете се използват за постигане на многозадачност.

какво е autowired в java

Ние обаче използваме многопоточност, отколкото многопроцесорност, защото нишките използват споделена област на паметта. Те не разпределят отделна област на паметта, така че спестяват памет, а превключването на контекст между нишките отнема по-малко време от процеса.

Java Multithreading се използва най-вече в игри, анимация и др.


Предимства на Java Multithreading

1) То не блокира потребителя тъй като нишките са независими и можете да извършвате множество операции едновременно.

2) Вие може да извършва много операции заедно, така че спестява време .

3) Нишките са независима , така че не засяга други нишки, ако възникне изключение в една нишка.


Многозадачност

Многозадачността е процес на изпълнение на множество задачи едновременно. Ние използваме многозадачност, за да използваме процесора. Многозадачността може да се постигне по два начина:

  • Многозадачност, базирана на процеси (Мултипроцесиране)
  • Многозадачност, базирана на нишки (Многопоточност)

1) Процесно базирана многозадачност (Мултипроцесиране)

  • Всеки процес има адрес в паметта. С други думи, всеки процес разпределя отделна област от паметта.
  • Един процес е тежък.
  • Разходите за комуникация между процеса са високи.
  • Преминаването от един процес към друг изисква известно време за запазване и зареждане регистри , карти на паметта, актуализиращи списъци и др.

2) Многозадачност, базирана на нишки (Многопоточност)

  • Нишките споделят едно и също адресно пространство.
  • Нишката е лека.
  • Разходите за комуникация между нишката са ниски.

Забележка: Необходим е поне един процес за всяка нишка.

Какво е нишка в java

Нишката е лек подпроцес, най-малката единица за обработка. Това е отделен път за изпълнение.

Нишките са независими. Ако възникне изключение в една нишка, това не засяга други нишки. Той използва споделена област на паметта.

Java Multithreading

Както е показано на фигурата по-горе, вътре в процеса се изпълнява нишка. Има превключване на контекста между нишките. В операционната система може да има множество процеси и един процес може да има множество нишки.

Забележка: В даден момент се изпълнява само една нишка.

Клас Java Thread

Java предоставя Клас нишка за постигане на програмиране на нишки. Класът на нишката предоставя конструктори и методи за създаване и извършване на операции върху нишка. Класът на нишката се разширява Клас обект и имплементира Runnable интерфейс.

Методи на Java Thread

С.Н. Модификатор и тип Метод Описание
1) невалиден начало() Използва се за стартиране на изпълнението на нишката.
2) невалиден тичам () Използва се за извършване на действие за нишка.
3) статична празнота сън() Той заспива нишка за определеното време.
4) статична нишка currentThread() Той връща препратка към текущо изпълнявания обект на нишка.
5) невалиден присъединяване() Изчаква нишката да умре.
6) вътр getPriority() Връща приоритета на нишката.
7) невалиден setPriority() Променя приоритета на нишката.
8) низ getName() Връща името на нишката.
9) невалиден setName() Променя името на нишката.
10) дълго getId() Връща идентификатора на нишката.
единадесет) булево isAlive() Тества дали нишката е жива.
12) статична празнота добив () Това кара текущо изпълнявания обект на нишка да постави на пауза и позволява на други нишки да се изпълнят временно.
13) невалиден спирам() Използва се за окачване на конеца.
14) невалиден продължи() Използва се за възобновяване на спряната нишка.
петнадесет) невалиден Спри се() Използва се за спиране на нишката.
16) невалиден унищожи() Използва се за унищожаване на групата нишки и всички нейни подгрупи.
17) булево isDaemon() Тества дали нишката е демон нишка.
18) невалиден setDaemon() Той маркира нишката като демон или потребителска нишка.
19) невалиден прекъсвам () Прекъсва нишката.
двадесет) булево е прекъснато () Тества дали нишката е била прекъсната.
двадесет и едно) статичен булев прекъснат() Тества дали текущата нишка е била прекъсната.
22) статично вътр activeCount() Връща броя на активните нишки в групата нишки на текущата нишка.
23) невалиден checkAccess() Той определя дали текущо изпълняваната нишка има разрешение да променя нишката.
24) статичен булев holdLock() Връща true, ако и само ако текущата нишка държи заключването на монитора на посочения обект.
25) статична празнота dumpStack() Използва се за отпечатване на проследяване на стека на текущата нишка към стандартния поток от грешки.
26) StackTraceElement[] getStackTrace() Той връща масив от стекови проследяващи елементи, представляващи дъмпа на стека на нишката.
27) статично вътр изброяване () Използва се за копиране на група нишки на всяка активна нишка и нейната подгрупа в посочения масив.
28) Thread.State getState() Използва се за връщане на състоянието на нишката.
29) ThreadGroup getThreadGroup() Използва се за връщане на групата нишка, към която принадлежи тази нишка
30) низ toString() Използва се за връщане на низово представяне на тази нишка, включително името, приоритета и групата на нишката.
31) невалиден уведомявам () Използва се за известяване само за една нишка, която чака конкретен обект.
32) невалиден notifyAll() Използва се за известяване на всички чакащи нишки на конкретен обект.
33) невалиден setContextClassLoader() Той задава контекстния ClassLoader за нишката.
3. 4) ClassLoader getContextClassLoader() Той връща контекста ClassLoader за нишката.
35) статичен Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler() Той връща манипулатора по подразбиране, извикан, когато нишка внезапно прекъсне поради неуловено изключение.
36) статична празнота setDefaultUncaughtExceptionHandler() Той задава манипулатора по подразбиране, който се извиква, когато нишка внезапно прекъсне поради неуловено изключение.
Знаеш ли
  • Как да изпълним две задачи с две нишки?
  • Как да изпълним многопоточност от анонимен клас?
  • Какво представлява Thread Scheduler и каква е разликата между превантивното планиране и отрязването на времето?
  • Какво се случва, ако стартираме нишка два пъти?
  • Какво се случва, ако извикаме метода run() вместо метода start()?
  • Каква е целта на метода за присъединяване?
  • Защо JVM прекратява нишката на демона, ако не са останали потребителски нишки?
  • Какво представлява куката за изключване?
  • Какво е събиране на боклука?
  • Каква е целта на метода finalize()?
  • Какво означава методът gc()?
  • Какво е синхронизация и защо се използва синхронизация?
  • Каква е разликата между синхронизиран метод и синхронизиран блок?
  • Какви са двата начина за извършване на статична синхронизация?
  • Какво е безизходица и кога може да възникне?
  • Какво е междунишкова комуникация или сътрудничество?
Какво ще научим в Multithreading
  • Многопоточност
  • Жизнен цикъл на нишка
  • Два начина за създаване на нишка
  • Как да изпълнявате множество задачи от множество нишки
  • Планировчик на теми
  • Заспиване на нишка
  • Можем ли да започнем тема два пъти?
  • Какво се случва, ако извикаме метода run() вместо метода start()?
  • Присъединяване към нишка
  • Наименуване на нишка
  • Приоритет на нишка
  • Daemon Thread
  • ShutdownHook
  • Събиране на боклук
  • Синхронизация със синхронизиран метод
  • Синхронизиран блок
  • Статична синхронизация
  • Безизходица
  • Комуникация между нишки