Что худшее может произойти если не позаботиться о синхронизации нескольких потоков

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

Ответ

Наиболее опасные последствия отсутствия синхронизации:

  1. Race conditions - непредсказуемый результат из-за порядка выполнения операций в разных потоках. Например:
var counter = 0
// В нескольких потоках:
counter++ // Может потерять инкременты
  1. Data corruption - повреждение данных при одновременной записи. Особенно критично для коллекций:
val list = mutableListOf<Int>()
// ConcurrentModificationException при одновременном изменении
  1. Deadlocks - взаимная блокировка потоков, ожидающих ресурсы друг друга.

  2. Memory consistency errors - чтение устаревших значений из-за кеширования в разных потоках.

  3. UI crashes - попытки обновления UI не из главного потока приводят к CalledFromWrongThreadException.