Какие знаешь способы асинхронной работы в Java

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

Ответ

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

  1. Threads - базовый механизм:
new Thread(() -> {
    // Асинхронный код
}).start();
  1. ExecutorService - пул потоков:
ExecutorService executor = Executors.newFixedThreadPool(4);
executor.submit(() -> {
    // Асинхронная задача
});
  1. Future/Callable - получение результата:
Future<String> future = executor.submit(() -> "Результат");
String result = future.get(); // Блокирующий вызов
  1. CompletableFuture (Java 8+) - более гибкий подход:
CompletableFuture.supplyAsync(() -> "Данные")
    .thenApplyAsync(data -> data + " обработаны")
    .thenAccept(System.out::println);
  1. RxJava - реактивное программирование:
Observable.just("Hello")
    .subscribeOn(Schedulers.io())
    .subscribe(System.out::println);

Для Android дополнительно есть:

  • Handler/Looper
  • AsyncTask (устарел)
  • Kotlin Coroutines (рекомендуемый способ)