Найти тему
DEBAGanov

Java 476. Какова цель метода join()? Объясните на примере?

Метод join() в Java используется для ожидания завершения выполнения другого потока. Как только поток, на который вызывается метод join(), завершится, контроль вернется назад к текущему потоку.

Цель метода join() заключается в синхронизации двух или более потоков, так что один поток может дождаться завершения другого, прежде чем продолжить свое выполнение. Например, если главный (основной) поток создает другой поток и хочет, чтобы он завершился до того, как программа продолжит работу, то главный поток может вызвать метод join() этого потока, чтобы дождаться его завершения.

Вот пример кода на Java, который показывает использование метода join():

public class Main {
public static void main(String[] args) throws InterruptedException {
Thread myThread = new Thread(new MyRunnable());
myThread.start();

System.out.println("Main thread is waiting for myThread to finish");
myThread.join();
// Главный (основной) поток ждет, пока myThread не завершится
System.out.println("myThread has finished, and now the main thread can continue");
}
}

class MyRunnable implements Runnable {
public void run() {
System.out.println("myThread is running");
try {
Thread.sleep(3000);
// Приостанавливаем выполнение текущего потока на 3 секунды
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("myThread has finished");
}
}

В этом примере мы создаем новый поток исполнения myThread и запускаем его. Затем главный (основной) поток вызывает метод join() объекта myThread, чтобы дождаться его завершения. После этого главный поток продолжает работу и выводит сообщение на консоль.

Если запустить эту программу, то ее результат будет таким:

myThread is running
Main thread is waiting for myThread to finish
(ожидание 3 секунды)
myThread has finished, and now the main thread can continue

Как видно из результата, выполнение главного (основного) потока останавливается после вызова myThread.join(), пока поток myThread не завершится. После того, как myThread завершится, выполнение главного потока продолжится и выводится соответствующее сообщение.

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov