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