Найти тему
DEBAGanov

Java 474. Можете ли вы сказать, какой поток перейдет в спящий режим после вызова myThread.sleep(5000)

474. Можете ли вы сказать, какой поток перейдет в спящий режим после вызова myThread.sleep(5000) в приведенной ниже программе? это основной поток или myThread?

В предположении, что myThread - это объект класса Thread, вызов myThread.sleep(5000) остановит выполнение потока myThread на 5 секунд.

Главный (основной) поток продолжит работу и начнет выполнять следующую строку кода после вызова myThread.sleep(5000). Это происходит потому, что метод sleep() блокирует только тот поток, который его вызывает, а не все потоки в приложении.

Таким образом, главный (основной) поток не будет затронут вызовом myThread.sleep(5000), и он будет продолжать работу независимо от того, спит ли myThread или нет.

Вот пример кода на Java, который демонстрирует это поведение:

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

try {
myThread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}

System.out.println("Main thread is still running");
}
}

class MyRunnable implements Runnable {
public void run() {
try {
System.out.println("My thread is going to sleep");
Thread.sleep(3000);
System.out.println("My thread woke up");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

В этом примере мы создаем новый поток исполнения myThread и запускаем его. Затем мы вызываем метод sleep() объекта myThread на 5 секунд в главном (основном) потоке. Мы также перехватываем исключение InterruptedException, которое может быть выброшено методом sleep(). После этого мы продолжаем работу и выводим сообщение "Main thread is still running" на консоль.

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

My thread is going to sleep
(ожидание 3 секунды)
My thread woke up
Main thread is still running

Как видно из результата, myThread выполняет задачу и спит на 3 секунды, в то время как главный (основной) поток продолжает работу и выводит сообщение на консоль независимо от того, спит ли myThread или нет.

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

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

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