Какие знаешь способы реализации асинхронного взаимодействия

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

Ответ

В Java есть несколько основных способов асинхронного взаимодействия:

  1. Threads - базовый механизм:
new Thread(() -> {
    // асинхронный код
}).start();
  1. ExecutorService - пул потоков:
ExecutorService executor = Executors.newFixedThreadPool(4);
executor.submit(() -> { /* задача */ });
  1. Future/Callable - получение результата асинхронно:
Future<String> future = executor.submit(() -> "result");
String result = future.get(); // блокирующий вызов
  1. CompletableFuture (Java 8+) - более гибкий подход:
CompletableFuture.supplyAsync(() -> "data")
    .thenApplyAsync(s -> s.toUpperCase())
    .thenAccept(System.out::println);
  1. Reactive Streams (RxJava, Project Reactor) - реактивное программирование

  2. Асинхронные сервлеты (для веба) - AsyncContext

  3. Messaging (JMS, Kafka) - асинхронная передача сообщений

Для неблокирующего IO - NIO (Selector, Channel) и современные фреймворки типа Netty.