---
title: Создание и управление потоками
seo:
  title: Создание и управление потоками — Java Developer
  description: Тема «Создание и управление потоками» для собеседования Java Developer. Чем различаются Thread и Runnable? Каким образом можно создать поток?
---

[Все темы Java Developer](/java-developer)

## <strong>Чем различаются</strong> <code>Thread</code> <strong>и</strong> <code>Runnable</code><strong>?</strong> [#q-14bee738d69b81fc9bd1e158de2f4ef1]

<strong>Основные различия между</strong> <code>Thread</code> <strong>и</strong>
<code>Runnable</code>
<strong>&#58;</strong>

#### Различия между <code>Thread</code> и <code>Runnable</code>

{/* prettier-ignore */}
- <code>Thread</code><strong>&#58;</strong>

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

    - Наследование от <code>Thread</code> позволяет переопределить метод <code>run</code>.

    - Пример использования&#58;

        ```java
        class MyThread extends Thread {
            public void run() {
                System.out.println("Thread is running");
            }
        }
        MyThread thread = new MyThread();
        thread.start();
        ```

- <code>Runnable</code><strong>&#58;</strong>

    - Интерфейс, который должен реализовать класс для выполнения в потоке.

    - Позволяет реализовать многопоточность без наследования от <code>Thread</code>.

    - Пример использования&#58;

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

:::note[Ссылки для изучения]

1. [Многопоточность в Java](https://javarush.com/groups/posts/1992-mnogopotochnostjh-v-java-sutjh-pljusih-i-chastihe-lovushki-)
   :::

---

## <strong>Каким образом можно создать поток?</strong> [#q-14bee738d69b8141a9b7ea743bbde9b5]

<strong>Способы создания потока в Java&#58;</strong>

1. <strong>Наследование от</strong> <code>Thread</code>
   <strong>&#58;</strong>

   ```java
   class MyThread extends Thread {
       public void run() {
           System.out.println("Thread is running");
       }
   }
   MyThread thread = new MyThread();
   thread.start();
   ```

1. <strong>Реализация интерфейса</strong> <code>Runnable</code>
   <strong>&#58;</strong>

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

1. <strong>Использование лямбда-выражения&#58;</strong>

   ```java
   Thread thread = new Thread(() -> System.out.println("Lambda is running"));
   thread.start();
   ```

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

:::note[Ссылки для изучения]

1. [Многопоточность в Java](https://javarush.com/groups/posts/1992-mnogopotochnostjh-v-java-sutjh-pljusih-i-chastihe-lovushki-)
   :::

---

## <strong>В чём заключается разница между методами</strong> <code>start&#40;&#41;</code> <strong>и</strong> <code>run&#40;&#41;</code><strong>?</strong> [#q-14bee738d69b81eb8fc5c130770f0069]

<strong>Разница между методами</strong> <code>start&#40;&#41;</code>
<strong>и</strong> <code>run&#40;&#41;</code>
<strong>&#58;</strong>

{/* prettier-ignore */}
- <code>start&#40;&#41;</code><strong>&#58;</strong>

    - Запускает новый поток выполнения.

    - Метод <code>run&#40;&#41;</code> выполняется в контексте нового потока.

    ```java
    Thread thread = new Thread(() -> System.out.println("Running in new thread"));
    thread.start();
    ```

- <code>run&#40;&#41;</code><strong>&#58;</strong>

    - Выполняется в текущем потоке.

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

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

:::note[Ссылки для изучения]

1. [Многопоточность в Java](https://javarush.com/groups/posts/1992-mnogopotochnostjh-v-java-sutjh-pljusih-i-chastihe-lovushki-)
   :::

---

## <strong>Как работает метод</strong> <code>Thread&#46;join&#40;&#41;</code><strong>?</strong> [#q-14bee738d69b81dc91a6f220b2c9beb0]

Метод <code>Thread&#46;join&#40;&#41;</code> заставляет текущий поток ждать завершения другого потока.

#### Пример&#58;

```java
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");
```

- <code>thread&#46;join&#40;&#41;</code>&#58; Текущий поток (например, основной
  поток) приостанавливается до завершения <code>thread</code>.

:::note[Ссылки для изучения]

1. [Многопоточность в Java](https://javarush.com/groups/posts/1992-mnogopotochnostjh-v-java-sutjh-pljusih-i-chastihe-lovushki-)
   :::

---

## <strong>Что значит «усыпить» поток?</strong> [#q-14bee738d69b8188a7f1c9cf4e2fc652]

"Усыпить" поток означает приостановить его выполнение на определённый период времени с помощью метода <code>Thread&#46;sleep&#40;milliseconds&#41;</code>.

#### Пример&#58;

```java
try {
    Thread.sleep(1000); // Усыпить поток на 1 секунду (1000 миллисекунд)
} catch (InterruptedException e) {
    e.printStackTrace();
}
```

- Поток приостанавливается на указанный период, после чего продолжает выполнение.

:::note[Ссылки для изучения]

1. [Многопоточность в Java](https://javarush.com/groups/posts/1992-mnogopotochnostjh-v-java-sutjh-pljusih-i-chastihe-lovushki-)
   :::
