Какие знаешь проблемы если несколько потоков будут записывать данные в MutableList

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

Ответ

Проблемы при многопоточном доступе к MutableList:

  1. ConcurrentModificationException - если один поток изменяет список, а другой в это время итерирует по нему.
  2. Race conditions - данные могут быть перезаписаны или потеряны из-за несинхронизированного доступа.
  3. Inconsistent state - список может оказаться в некорректном состоянии между операциями добавления/удаления.

Решение:
Используйте потокобезопасные коллекции или синхронизацию:

// Вариант 1: SynchronizedList
val safeList = Collections.synchronizedList(mutableListOf<Int>())

// Вариант 2: CopyOnWriteArrayList (лучше для частого чтения)
val copyOnWriteList = CopyOnWriteArrayList<Int>()

// Вариант 3: Мьютекс
val mutex = Mutex()
var list = mutableListOf<Int>()

suspend fun addItem(item: Int) {
    mutex.withLock {
        list.add(item)
    }
}