logo

Багатопотоковість в Java

  1. Багатопотоковість
  2. Багатозадачність
  3. Багатозадачність на основі процесів
  4. Багатозадачність на основі потоків
  5. Що таке Thread

Багатопотоковість в Java це процес виконання кількох потоків одночасно.

Потік — це легкий підпроцес, найменша одиниця обробки. Багатопроцесорність і багатопотоковість використовуються для досягнення багатозадачності.

fmoviez

Однак ми використовуємо багатопотоковість, ніж багатопроцесорність, оскільки потоки використовують спільну область пам’яті. Вони не виділяють окрему область пам’яті, що економить пам’ять, а перемикання контексту між потоками займає менше часу, ніж процес.

Багатопотоковість Java в основному використовується в іграх, анімації тощо.


Переваги Java Multithreading

1) Це не блокує користувача тому що потоки незалежні, і ви можете виконувати кілька операцій одночасно.

2) Ви може виконувати багато операцій разом, що економить час .

3) Нитки є незалежний , тому це не впливає на інші потоки, якщо виняток виникає в одному потоці.


Багатозадачність

Багатозадачність — це процес виконання кількох завдань одночасно. Ми використовуємо багатозадачність, щоб використовувати ЦП. Багатозадачність може бути досягнута двома способами:

  • Багатозадачність на основі процесів (багатопроцесорність)
  • Багатозадачність на основі потоків (багатопотоковість)

1) Багатозадачність на основі процесів (багатопроцесорність)

  • Кожен процес має адресу в пам'яті. Іншими словами, кожен процес виділяє окрему область пам'яті.
  • Процес важкий.
  • Вартість комунікації між процесом висока.
  • Перехід від одного процесу до іншого вимагає певного часу для збереження та завантаження регістри , карти пам'яті, оновлення списків тощо.

2) Потокова багатозадачність (багатопотоковість)

  • Потоки спільно використовують той самий адресний простір.
  • Нитка легка.
  • Вартість зв'язку між потоками низька.

Примітка. Для кожного потоку потрібен принаймні один процес.

Що таке Thread в java

Потік — це легкий підпроцес, найменша одиниця обробки. Це окремий шлях виконання.

Потоки незалежні. Якщо в одному потоці виникає виняткова ситуація, це не впливає на інші. Він використовує спільну область пам'яті.

Багатопотоковість Java

Як показано на малюнку вище, потік виконується всередині процесу. Існує перемикання контексту між потоками. Всередині ОС може бути кілька процесів, і один процес може мати кілька потоків.

Примітка. Одночасно виконується лише один потік.

Клас Java Thread

Java надає Клас ниток для досягнення програмування потоку. Клас Thread забезпечує конструктори і методи створення та виконання операцій над потоком. Клас потоку розширюється Клас об'єкта і реалізує інтерфейс Runnable.

Методи потоків Java

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