Що таке Concurrency в Java? - Повне керівництво по Concurrency на Java

Зміст:

Anonim

Що таке Concurrency в Java?

У сучасному світі все швидко розвивається. Завжди є сфера вдосконалення в кожному і всьому. Так само і з нашою мовою програмування. Сьогодні, використовуючи наші сучасні технології, ми очікуємо, що все буде зроблено легко та швидко. Для того, щоб робити кілька речей одночасно або робити кілька речей одночасно, виникла концепція одночасності. Отже, що насправді є одночасністю, в чому її використання, навіщо це справді потрібно та багато іншого. Ми спробуємо торкнутися таких питань і відповісти на них у цій статті по черзі. Тож давайте підведемо нашу дискусію до дуже базового загального розділу, який полягає у визначенні паралельності. У цій темі ми дізнаємось про те, що таке паралельність на Java.

Визначення одночасності?

Отже, що таке насправді? Що ж, щоб відповісти, що давайте скористаємося загальним сценарієм. Припустимо, читаючи цю статтю, ви намагаєтесь робити кілька речей одночасно, можливо, ви також намагаєтесь зробити замітку, можливо, ви намагаєтесь зрозуміти це чи думати якісь речі. Тож простими словами ви намагаєтеся робити кілька речей паралельно. Ось що означає одночасність. Паралельність - це просто виконання декількох завдань паралельно один одному. Ми будемо обговорювати паралельність у цій статті в області використання Java як мови програмування.

Насправді, в Java або взагалі в будь-якій мові програмування саме ця нитка відповідає за проведення одночасності. Основна роль цих потоків - сприяти паралельному виконанню завдань. Тим часом, маємо базове визначення теми.

Отже, що таке нитка?

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

Тепер перейдемо до наступної теми, а саме:

Паралельність у визначенні Java?

Так, у Java або будь-якій іншій мові програмування, на зразок C # тощо, вся мова OOP має концепцію нарізки. У Java у нас є різні процеси, які запускаються, створюючи різні нитки для досягнення одночасності

Тож після цього простого визначення давайте обговоримо нашу нову тему:

Що робить додаток Java одночасним?

Перший клас, який потрібно зробити для одночасного застосування програми java, - клас java.lang.Thread. java.lang.Thread клас відповідає за всі концепції одночасності мови програмування Java. Після цього у нас є інтерфейс java.lang.Runnable для абстрагування поведінки потоку з класу потоку.

Інший клас, який нам знадобиться для створення розширеного додатка, буде використовуватися з пакету java.util.concurrent, доданого в Java 1.5.

Тепер з цим ми дійшли нового питання, яке:

Чи справді Java Concurrency настільки проста?

Як здається, реалізувати паралельність на Java досить просто. Однак насправді це не так. Давайте подивимось на це.

Наше вище обговорення загалом створює враження, що паралельність - це дійсно проста, хороша концепція та її досить легко здійснити. Добре, якщо ми спостерігаємо за кращим способом і намагаємось зрозуміти це, ми виявляємо, що для цього потрібно добре розуміти основні поняття, а також глибоке розуміння того, що нам потрібно досягти.

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

Крім помилок та поширених дефектів, паралельні потоки потребують більше ресурсів для запуску програми

Проблеми та вдосконалення одночасності - Пояснення на прикладі

Тому в основному існує два типи проблем, які присвоюються через одночасність. Ці проблеми можна загалом класифікувати на дві категорії

  • Помилки втручання нитки
  • Помилки узгодженості пам'яті

Давайте розберемося кожен по одному

Помилки втручання нитки - розберемося на простому прикладі.

Припустимо, у нас є функція лічильника, основна роль якої полягає у збільшенні лічильника або підрахунку числа. Тепер припустимо, що у нас є дві нитки, нитка A і потік B. Припустимо, потік A читає початкове значення як 0. Тепер наступні кроки виконуються послідовно.

  1. Нитка А читає початкове значення як 0
  2. Нитка B зчитує початкове значення як 0
  3. Нитка Збільшення значення на 1. Нове значення тепер дорівнює 1
  4. Нитка B також паралельно збільшує значення до 1.
  5. Нитка A записує оновлене значення, яке 1 у комірку пам'яті
  6. Нитка B також повторює той же крок, який записується в оновлене значення комірки пам’яті 1

Тож тут виникає проблема. Два потоки A & B, виконайте код два рази і очікуване значення 2, але те, що відображено, це 1. Це основна проблема, яку можуть викликати кілька потоків

Як це можна було вирішити?

Помилки перешкод потоку можна вирішити, синхронізувавши доступ до загальних змінних. Нам потрібно синхронізувати оновлені значення між спільними даними

За допомогою цього розглянемо другий тип помилок

Помилки послідовності пам'яті

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

Давайте подивимось, чому це відбувається?

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

Висновок - Що таке паралельність у Java?

Паралельність є дуже важливою особливістю мови OOP. Нитка дає нам можливість виконувати паралельно один одному кілька процесів. Це допомагає нам швидше виконати наше складне завдання. Однак у плюсів у одночасності теж мало мінусів. Використання ниток викликає велике використання ресурсів

Рекомендовані статті

Це керівництво щодо того, що таке паралельність на Java. Тут ми на прикладі обговорили Проблеми та вдосконалення в паралельній валюті. Ви також можете ознайомитися з іншими запропонованими нами статтями, щоб дізнатися більше -

  1. Що таке багатопотокова редакція у Java?
  2. Як підключити базу даних на Java?
  3. Що таке багатопотокова редакція у Java?
  4. Що таке J2EE?