Что такое синхронное взаимодействие в программировании?

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

Ответ

Синхронное взаимодействие — это модель обмена данными, при которой отправитель (клиент, поток) блокируется и ожидает немедленного ответа от получателя (сервера, другого потока) перед продолжением своей работы.

Ключевая характеристика: Блокировка потока выполнения до завершения операции.

Пример в Java (блокирующий HTTP-запрос):

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.example.com/data"))
        .build();
// Поток заблокирован здесь до получения ответа
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Ответ получен: " + response.body()); // Код выполнится только после send()

Другие примеры:

  • Вызов synchronized метода или блока (поток ждет освобождения монитора).
  • Обычный вызов метода в том же потоке.
  • Блокирующие операции чтения/записи (InputStream.read()).

Преимущества:

  • Простота понимания и отладки (линейный поток выполнения).
  • Предсказуемость порядка операций.

Недостатки:

  • Низкая эффективность ресурсов: Поток простаивает в ожидании, особенно при высоких задержках (I/O, сеть).
  • Потенциальные "узкие места" для производительности и масштабируемости.