Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

Thread.join()

Ждёт, пока поток завершится.

Доступно с: Java 1.0

Синтаксис

public final void join() throws InterruptedException
public final boolean join(Duration duration) throws InterruptedException

Параметры

ПараметрТипОписание
durationDurationНеобязательный предел ожидания (Java 19).

Примеры

Без join() результат может быть ещё не готов:

void main() throws InterruptedException {
    List<String> log = Collections.synchronizedList(new ArrayList<>());
    Thread t = new Thread(() -> {
        try { Thread.sleep(200); } catch (InterruptedException e) { return; }
        log.add("work finished");
    });
    t.start();
    IO.println("before join: " + log);
    t.join();
    IO.println("after join: " + log);
}

Результат:

before join: []
after join: [work finished]

Примечания

Метод блокирует текущий поток до завершения другого. Он объявляет проверяемое InterruptedException, поэтому main либо пишется с throws InterruptedException, либо оборачивает вызов в try. Версия с Duration ждёт не дольше заданного времени.

См. также

  • Thread.start() — Запускает поток: его код начинает выполняться параллельно с вызывающим.
  • Thread.sleep() — Приостанавливает текущий поток на заданное время.
  • CountDownLatch — Счётчик, который позволяет одному потоку дождаться, пока другие выполнят N действий.
  • Future.get() — Ждёт завершения задачи и возвращает её результат.

В учебнике

  • Потоки выполнения — Потоки в Java — класс Thread, запуск через start, ожидание через join, Thread.sleep, имена потоков и непредсказуемый порядок выполнения.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.