- Многопоточност
- Многозадачност
- Многозадачност, базирана на процеси
- Многозадачност, базирана на нишки
- Какво е Thread
Многопоточност в Java е процес на изпълнение на множество нишки едновременно.
Нишката е лек подпроцес, най-малката единица за обработка. Многопроцесорна и многонишкова обработка, и двете се използват за постигане на многозадачност.
какво е autowired в java
Ние обаче използваме многопоточност, отколкото многопроцесорност, защото нишките използват споделена област на паметта. Те не разпределят отделна област на паметта, така че спестяват памет, а превключването на контекст между нишките отнема по-малко време от процеса.
Java Multithreading се използва най-вече в игри, анимация и др.
Предимства на Java Multithreading
1) То не блокира потребителя тъй като нишките са независими и можете да извършвате множество операции едновременно.
2) Вие може да извършва много операции заедно, така че спестява време .
3) Нишките са независима , така че не засяга други нишки, ако възникне изключение в една нишка.
Многозадачност
Многозадачността е процес на изпълнение на множество задачи едновременно. Ние използваме многозадачност, за да използваме процесора. Многозадачността може да се постигне по два начина:
- Многозадачност, базирана на процеси (Мултипроцесиране)
- Многозадачност, базирана на нишки (Многопоточност)
1) Процесно базирана многозадачност (Мултипроцесиране)
- Всеки процес има адрес в паметта. С други думи, всеки процес разпределя отделна област от паметта.
- Един процес е тежък.
- Разходите за комуникация между процеса са високи.
- Преминаването от един процес към друг изисква известно време за запазване и зареждане регистри , карти на паметта, актуализиращи списъци и др.
2) Многозадачност, базирана на нишки (Многопоточност)
- Нишките споделят едно и също адресно пространство.
- Нишката е лека.
- Разходите за комуникация между нишката са ниски.
Забележка: Необходим е поне един процес за всяка нишка.
Какво е нишка в java
Нишката е лек подпроцес, най-малката единица за обработка. Това е отделен път за изпълнение.
Нишките са независими. Ако възникне изключение в една нишка, това не засяга други нишки. Той използва споделена област на паметта.
Както е показано на фигурата по-горе, вътре в процеса се изпълнява нишка. Има превключване на контекста между нишките. В операционната система може да има множество процеси и един процес може да има множество нишки.
Забележка: В даден момент се изпълнява само една нишка.
Клас 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()?
- Какво е синхронизация и защо се използва синхронизация?
- Каква е разликата между синхронизиран метод и синхронизиран блок?
- Какви са двата начина за извършване на статична синхронизация?
- Какво е безизходица и кога може да възникне?
- Какво е междунишкова комуникация или сътрудничество?
- Многопоточност
- Жизнен цикъл на нишка
- Два начина за създаване на нишка
- Как да изпълнявате множество задачи от множество нишки
- Планировчик на теми
- Заспиване на нишка
- Можем ли да започнем тема два пъти?
- Какво се случва, ако извикаме метода run() вместо метода start()?
- Присъединяване към нишка
- Наименуване на нишка
- Приоритет на нишка
- Daemon Thread
- ShutdownHook
- Събиране на боклук
- Синхронизация със синхронизиран метод
- Синхронизиран блок
- Статична синхронизация
- Безизходица
- Комуникация между нишки