Thread.join()
Ждёт, пока поток завершится.
Доступно с: Java 1.0
Синтаксис
public final void join() throws InterruptedException
public final boolean join(Duration duration) throws InterruptedExceptionПараметры
| Параметр | Тип | Описание |
|---|---|---|
| duration | Duration | Необязательный предел ожидания (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, имена потоков и непредсказуемый порядок выполнения.