Что такое поток (thread) в программировании?

«Что такое поток (thread) в программировании?» — вопрос из категории Java Core, который задают на 22% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Поток (thread) — это наименьшая единица выполнения внутри процесса. Процесс может содержать несколько потоков, которые выполняются параллельно (или псевдопараллельно) и разделяют общие ресурсы процесса, такие как память и открытые файлы.

Ключевые характеристики потоков:

  • Разделяемая память: Потоки одного процесса работают в одном адресном пространстве.
  • Независимый поток выполнения: Каждый поток имеет собственный стек вызовов и программный счетчик.
  • Легковесность: Создание и переключение между потоками требует меньше ресурсов, чем между процессами.

Пример создания потока в Java:

// Способ 1: Наследование от класса Thread
class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("Поток выполняется: " + Thread.currentThread().getName());
    }
}

// Способ 2: Реализация интерфейса Runnable (предпочтительнее)
class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("Задача выполняется в потоке");
    }
}

// Запуск
Thread t1 = new MyThread();
t1.start(); // Запускает новый поток

Thread t2 = new Thread(new MyRunnable());
t2.start();

// Через лямбда-выражение (Java 8+)
Thread t3 = new Thread(() -> System.out.println("Лямбда-поток"));
t3.start();

Важно: Параллельный доступ потоков к общим данным требует синхронизации (например, с помощью synchronized, Lock или атомарных классов) для предотвращения состояний гонки (race condition) и обеспечения согласованности данных.