Ответ
- Race Condition – когда несколько потоков обращаются к общим данным без синхронизации, и результат зависит от порядка выполнения.
var counter = 0
repeat(100) {
thread { counter++ } // Непредсказуемый результат
}
- Deadlock – взаимная блокировка потоков, когда каждый ждёт освобождения ресурса, занятого другим.
val lockA = Any()
val lockB = Any()
thread { synchronized(lockA) { synchronized(lockB) { ... } } }
thread { synchronized(lockB) { synchronized(lockA) { ... } } }
-
Memory Leaks – утечки из-за удержания ссылок в фоновых потоках (например,
ThreadилиHandlerThreadбез очистки). -
UI-заморозки – долгие операции в главном потоке приводят к лагам интерфейса.
-
LiveData/Flow Race – подписка на данные из фонового потока без правильного контекста (
Dispatchers.Main.immediate).
Решение: Использовать Coroutine с Mutex, SharedFlow, или synchronized, избегать блокировок, проверять контексты.
Видео-ответы
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶
▶