Перейти к содержимому
На этой странице

Создание и управление потоками

Все темы Java Developer

Чем различаются Thread и Runnable?

Основные различия между Thread и Runnable :

Различия между Thread и Runnable

  • Thread :
    • Класс, представляющий поток выполнения.

    • Наследование от Thread позволяет переопределить метод run.

    • Пример использования:

      class MyThread extends Thread {
          public void run() {
              System.out.println("Thread is running");
          }
      }
      MyThread thread = new MyThread();
      thread.start();
  • Runnable :
    • Интерфейс, который должен реализовать класс для выполнения в потоке.

    • Позволяет реализовать многопоточность без наследования от Thread.

    • Пример использования:

      class MyRunnable implements Runnable {
          public void run() {
              System.out.println("Runnable is running");
          }
      }
      Thread thread = new Thread(new MyRunnable());
      thread.start();

Каким образом можно создать поток?

Способы создания потока в Java:
  1. Наследование от Thread :
    class MyThread extends Thread {
        public void run() {
            System.out.println("Thread is running");
        }
    }
    MyThread thread = new MyThread();
    thread.start();
  2. Реализация интерфейса Runnable :
    class MyRunnable implements Runnable {
        public void run() {
            System.out.println("Runnable is running");
        }
    }
    Thread thread = new Thread(new MyRunnable());
    thread.start();
  3. Использование лямбда-выражения:
    Thread thread = new Thread(() -> System.out.println("Lambda is running"));
    thread.start();

Эти три способа позволяют создать и запустить поток в Java.


В чём заключается разница между методами start() и run()?

Разница между методами start() и run() :
  • start() :
    • Запускает новый поток выполнения.

    • Метод run() выполняется в контексте нового потока.

    Thread thread = new Thread(() -> System.out.println("Running in new thread"));
    thread.start();
  • run() :
    • Выполняется в текущем потоке.

    • Не запускает новый поток.

    Thread thread = new Thread(() -> System.out.println("Running in current thread"));
    thread.run();

Как работает метод Thread.join()?

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

Пример:

Thread thread = new Thread(() -> {
    // Код, выполняемый в новом потоке
    System.out.println("Thread is running");
});

thread.start(); // Запуск нового потока

try {
    thread.join(); // Ожидание завершения нового потока
} catch (InterruptedException e) {
    e.printStackTrace();
}

System.out.println("Main thread continues after the other thread has finished");
  • thread.join(): Текущий поток (например, основной поток) приостанавливается до завершения thread.

Что значит «усыпить» поток?

“Усыпить” поток означает приостановить его выполнение на определённый период времени с помощью метода Thread.sleep(milliseconds).

Пример:

try {
    Thread.sleep(1000); // Усыпить поток на 1 секунду (1000 миллисекунд)
} catch (InterruptedException e) {
    e.printStackTrace();
}
  • Поток приостанавливается на указанный период, после чего продолжает выполнение.

Собеседования: Java

Смотри записи интервью, узнай, какие вопросы задают и как отвечают кандидаты.

Вопросы и ответы

Не нашли ответ? Напишите мне в чат. Я делаю Шпаргалку и сам отвечаю на сообщения. Расскажите, что не работает или чего вам не хватает. Может, смогу сразу взять это в работу.

Откуда взяты вопросы?

Из реальных собеседований. Основой подборки стал опыт Вадима Новосёлова: он проходил интервью и записывал вопросы. Подробнее о материалах.

Насколько эти вопросы актуальны?

Эти вопросы встречались нам на реальных собеседованиях в 2025 году. Мы регулярно проходим собеседования и пополняем подборку новыми вопросами. Основы профессии и ключевые технологии остаются востребованными годами, а детали конкретных инструментов и версий стоит сверять с текущей документацией.

На какой уровень рассчитана подборка?

Мы проходили собеседования на вакансии уровня Middle+, а иногда и на Senior-позиции. Вопросы из этих интервью вошли в подборку. Направления работы: Java-разработчик, Backend-разработчик на Java. Глубина обсуждения зависит от вакансии: будь готов объяснить основную идею, привести практический пример и разобрать ограничения и альтернативы решения.

Этот вопрос точно будет на моём собеседовании?

Гарантии нет: набор вопросов зависит от компании, задач команды, уровня вакансии и самого интервьюера. Эти вопросы уже встречались на реальных собеседованиях, но на твоём интервью ту же тему могут проверить другой формулировкой, практической задачей или обсуждением твоего опыта. Используй подборку, чтобы разобраться в теме: объясняй идею своими словами, приводи примеры и готовься обсудить ограничения и альтернативы решения. Так будет проще ответить и на знакомый вопрос, и на неожиданные уточнения.