Встречается на собеседованиях • сегодня

Как можно решить проблему Livelock

Livelock возникает, когда потоки активно работают, но не продвигаются из-за взаимных блокировок. В отличие от deadlock, потоки не заблокированы, а бесконечно реагируют на действия друг друга.

Пример:
Два потока пытаются пропустить друг друга через дверь, но оба одновременно отступают, создавая цикл.

Решение:

  1. Random backoff – добавление случайной задержки перед повторной попыткой:
java
while (!tryLock()) {
    Thread.sleep((long) (Math.random() * 100)); // Случайная пауза
}
  1. Приоритеты – задать порядок блокировок (например, по ID потока).
  2. Timeout – ограничить время попыток:
java
if (lock.tryLock(500, TimeUnit.MILLISECONDS)) { ... }
  1. Отказ от повторной попытки – переключиться на другую задачу.

Ключ – разорвать цикл взаимных реакций через задержки, приоритеты или отказы.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы