Проверяет понимание проблем синхронизации в многопоточности.
Deadlock: Потоки блокируют друг друга навсегда (ожидают ресурсы по кругу).
Livelock: Потоки активно работают, но не прогрессируют (например, из-за "вежливой" логики).
Условия:
Взаимная блокировка (A ждёт B, B ждёт A).
Нет прерывания блокировок.
Пример:
// Поток 1: lock A → ждёт B
// Поток 2: lock B → ждёт AПример:
Два потока пытаются "уступить" ресурс друг другу, но в итоге ни один не работает:
while (другой поток активен) {
Thread.yield(); // Бесконечное "вежливое" ожидание
}Вывод:
Deadlock — полная остановка.
Livelock — бессмысленная активность.