Что такое синхронность в программировании и для чего она нужна?

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

Ответ

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

Для чего нужна:

  • Простота понимания и отладки: Поток выполнения линейный и предсказуемый.
  • Гарантия порядка: Операции выполняются строго в том порядке, в котором они записаны в коде.
  • Контроль состояния: Упрощает управление общими данными, так как нет параллельного доступа.

Пример в Java:

// Синхронный вызов метода
int result = calculateExpensiveValue(); // Поток блокируется здесь
System.out.println("Результат: " + result); // Выполнится только после calculateExpensiveValue()

Недостаток: Низкая эффективность при операциях ввода-вывода (например, чтение файла, сетевой запрос), так как поток простаивает в ожидании, вместо выполнения другой полезной работы. Для решения этой проблемы используют асинхронное программирование или многопоточность.