— Привіт, Аміго! Я бачу, ти робиш великі успіхи у вивченні потоків.
— Це виявилось нескладно.
— Так це ж чудово! Сьогодні легкий урок, і тема цього уроку – метод join.
Уяви собі ситуацію: головний потік створив дочірній потік для виконання якогось завдання. Минає час, і головному потокові знадобилися результати роботи того дочірнього потоку. А дочерній потік ще не закінчив свою роботу. Що робити головному потокові?
— Так, що робити головному потокові?
— Для цього є метод join. Сенс його в наступному. Один потік чекає, поки повністю завершиться робота другого потоку:
Код | Опис |
---|---|
|
Клас, який реалізує інтерфейс Runnable. |
|
Головний потік створює дочірній потік – об'єкт thread1.
Потім запускає його – виклик thread1.start(); І чекає на його завершення – thread1.join(); |
Один потік може викликати метод join в об'єкта другого потоку. В результаті перший потік (який викликав метод) призупиняє свою роботу до закінчення роботи другого потоку (об'єкт якого викликано методом).
Тут варто розрізняти дві речі: є, власне, потік – окремий процес виконання команд, а є об'єкт цього потоку (об'єкт Thread).
— І це все?
— Так.
— А навіщо потрібно створювати потік і одразу ж чекати на його завершення?
— Одразу може й не потрібно. А ось через якийсь час це може і знадобиться. Головний потік після запуску першого дочірнього потоку може роздати ще багато завдань іншим потокам (створивши їх і викликавши метод start), а потім все – роботи йому більше не залишилося, потрібно опрацьовувати результати роботи першого дочірнього потоку. У таких випадках, коли потрібно обов'язково дочекатися завершення роботи іншого потоку, і потрібно викликати метод join.
— Зрозуміло.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ