В чем концептуальная разница между многопоточностью и асинхронностью?

«В чем концептуальная разница между многопоточностью и асинхронностью?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Многопоточность (Multithreading) — это модель параллельного выполнения кода, где несколько потоков (threads) выполняются одновременно, используя несколько ядер CPU. Проблемы: гонки данных, deadlock, высокие накладные расходы на создание и переключение потоков.

Асинхронность (Asynchrony) — это модель обработки задач, при которой поток не блокируется, ожидая завершения долгой операции (чаще всего I/O). Поток может начать операцию и переключиться на другую задачу, а результат будет обработан позже.

Ключевое отличие: Многопоточность — про параллелизм выполнения (кто выполняет), асинхронность — про неблокирующую обработку (как выполняется).

Примеры в Java:

// 1. Многопоточность (параллельное выполнение)
new Thread(() -> {
    // Долгая CPU-задача
    int result = computeHeavyAlgorithm();
    System.out.println("Результат потока: " + result);
}).start();

// 2. Асинхронность (неблокирующий вызов)
CompletableFuture.supplyAsync(() -> fetchDataFromRemoteService()) // Выполняется в другом потоке
    .thenAccept(data -> System.out.println("Получены данные: " + data)) // Обработка результата
    .exceptionally(ex -> { System.err.println("Ошибка: " + ex); return null; });

Современный контекст:

  • Project Loom вводит виртуальные потоки (virtual threads), которые позволяют писать синхронный блокирующий код, но выполняемый асинхронно с минимальными накладными расходами.
  • Асинхронность часто реализуется поверх пула потоков (например, ForkJoinPool у CompletableFuture), где небольшое количество потоков обрабатывает множество асинхронных задач.

Выбор подхода:

  • Используйте многопоточность для параллельных CPU-интенсивных задач.
  • Используйте асинхронность для I/O-интенсивных операций (сеть, БД, файлы), чтобы эффективно использовать ресурсы.