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

В чем разница между DeadLock и LiveLock

DeadLock - ситуация, когда потоки блокируют друг друга, ожидая ресурсы, которые никогда не освободятся. Например, Thread1 держит lockA и ждет lockB, а Thread2 держит lockB и ждет lockA.

LiveLock - потоки активно работают, но не продвигаются, постоянно "уступая" ресурсы друг другу. Пример - два потока пытаются пройти через узкий коридор, каждый отступает, чтобы пропустить другого, но в итоге оба стоят на месте.

Пример LiveLock:

java
class LiveLockExample {
    static boolean polite = true;

    public static void main(String[] args) {
        new Thread(() -> {
            while (polite) {
                System.out.println("Thread1 уступает");
                polite = false;
                try { Thread.sleep(100); } catch (InterruptedException e) {}
            }
        }).start();

        new Thread(() -> {
            while (!polite) {
                System.out.println("Thread2 уступает");
                polite = true;
                try { Thread.sleep(100); } catch (InterruptedException e) {}
            }
        }).start();
    }
}

Ключевое отличие: при DeadLock потоки полностью заблокированы, при LiveLock - активно выполняют бесполезную работу.

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

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

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

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