Назад к вопросам
Альфа-Банк
Junior — Middle
67
Какое назначение у класса ReentrantLock в Java и в чем его преимущества по сравнению с synchronized?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Класс ReentrantLock в Java используется для управления доступом к общим ресурсам в многопоточной среде, обеспечивая механизм блокировки с возможностью повторного захвата (reentrant). Это значит, что поток, уже владеющий блокировкой, может захватить её повторно без взаимной блокировки.
Преимущества ReentrantLock по сравнению с ключевым словом synchronized:
- Гибкость управления блокировкой: можно явно захватывать и освобождать блокировку, что позволяет реализовывать более сложные сценарии синхронизации.
- Возможность прерывания ожидания блокировки: метод
lockInterruptibly()позволяет потоку прерваться во время ожидания блокировки. - Попытка захвата блокировки без ожидания: метод
tryLock()позволяет попытаться захватить блокировку и сразу получить результат, не блокируя поток. - Поддержка условий (Condition):
ReentrantLockпредоставляет объектыConditionдля более тонкой работы с ожиданием и уведомлением потоков, в отличие отwait()/notify()уsynchronized.
Пример использования ReentrantLock:
import java.util.concurrent.locks.ReentrantLock;
public class Counter {
private final ReentrantLock lock = new ReentrantLock();
private int count = 0;
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
public int getCount() {
lock.lock();
try {
return count;
} finally {
lock.unlock();
}
}
}