Перейти к содержимому
шпаргалка.
Esc
навигацияоткрыть⌘Jпредпросмотр
На этой странице

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

Все темы 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();
}
  • Поток приостанавливается на указанный период, после чего продолжает выполнение.

Эта страница была полезной?