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

Что такое Livelock в Java

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

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

java
class Resource {
    boolean isTransferred = false;
}

Thread t1 = new Thread(() -> {
    while (!resource.isTransferred) {
        System.out.println("T1 ждёт передачи...");
        Thread.sleep(100); // Имитация работы
    }
});

Thread t2 = new Thread(() -> {
    while (resource.isTransferred) {
        System.out.println("T2 ждёт передачи...");
        Thread.sleep(100); // Имитация работы
    }
});

t1.start();
t2.start();

Здесь потоки зависают в вечном цикле, реагируя на изменение флага, но никогда не завершаются. Решение — пересмотреть логику синхронизации или использовать таймауты.

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

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

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

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