Що таке потоки в Java?

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

Однак це визначення не є точним на 100%. Програма може мати кілька процесів. Наведене вище визначення — лише простий і корисний спосіб уявити процес.

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

У Java розробники можуть створювати багатопотокові застосунки. Багатопотоковість дає змогу частинам вашої програми виконуватися одночасно або паралельно, значно підвищуючи продуктивність вашого застосунку.

Важливо розрізняти конкурентність і паралелізм. Програма може працювати конкурентно, але не паралельно.

Конкурентність означає виконання кількох частин тієї самої програми (не одночасно). Ці різні частини виконуються завдяки розподілу часу. З іншого боку, паралелізм означає одночасне виконання кількох частин тієї самої програми.

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

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

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

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

Як реалізувати потоки в Java

Є два способи використовувати потоки в застосунках Java. Перший спосіб — реалізувати інтерфейс Runnable. Реалізувавши цей інтерфейс, ви маєте надати тіло методу run() у своєму класі. Цей код запускатиме ваш потік.

Важливо зазначити, що під час створення екземпляра класу потік створюється не відразу. Потік створюється під час виклику методу start().

Заключні думки про використання потоків у Java

У цьому посібнику з програмування показано, як можна використовувати Java Threads API та переваги багатопотоковості. Під час написання звичайних Java-застосунків ви можете просто залишити обробку потоків JVM.

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