Что такое starvation

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

Ответ

Starvation (голодание) — это ситуация, когда поток долго не может получить доступ к ресурсу из-за того, что другие потоки постоянно его монополизируют.

Причины:

  • Высокоприоритетные потоки захватывают ресурс
  • Несправедливое планирование (например, synchronized в Java)
  • Долгие операции в критической секции

Пример:

val lock = Any()

thread(priority = Thread.MAX_PRIORITY) {
    while (true) {
        synchronized(lock) { /* долгая работа */ }
    }
}

thread(priority = Thread.MIN_PRIORITY) {
    // Этот поток может никогда не получить lock
    synchronized(lock) { /* важная работа */ }
}

Решение:

  • Использовать ReentrantLock с fair policy
  • Уменьшать время работы в критических секциях
  • Балансировать приоритеты потоков