Метод `join()` в Java используется для ожидания завершения выполнения потока, на котором он вызывается. Когда вызывается метод `join()` на определенном потоке, текущий поток будет приостановлен до тех пор, пока указанный поток не завершится. Метод `join()` полезен, когда вам нужно дождаться завершения выполнения определенного потока, прежде чем продолжить выполнение текущего потока или выполнить следующие операции. Это может быть полезно, например, когда вы хотите собрать результаты выполнения потока или синхронизировать потоки. Вот пример: public class JoinExample { public static void main(String[] args) throws InterruptedException { Thread thread1 = new Thread(() -> { // выполнение операций потока 1 }); Thread thread2 = new Thread(() -> { // выполнение операций потока 2 }); thread1.start(); thread2.start(); // ожидание завершения выполнения потока 1 thread1.join(); // ожидание завершения выполнения потока 2 thread2.join(); // продолжение выполнения текущего потока System.out.println("Все потоки завершены"); } } В этом примере у нас есть два потока: `thread1` и `thread2` . Мы вызываем метод `start()` для запуска выполнения каждого потока. Затем мы вызываем метод `join()` на каждом потоке, чтобы дождаться их завершения. После завершения обоих потоков мы продолжаем выполнение текущего потока и выводим сообщение на экран. Метод `join()` может быть вызван с параметром, указывающим максимальное время ожидания завершения потока. Например, `thread.join(5000)` ожидает завершения потока не более 5 секунд. Если поток завершится раньше, метод `join()` вернет управление раньше указанного времени ожидания. Использование метода `join()` позволяет контролировать последовательность выполнения потоков и синхронизировать их работу.