Junior — Middle
123
Wat is het doel van de klasse ReentrantLock in Java en wat zijn de voordelen ten opzichte van synchronized?
Bedrijven waar gevraagd werd
Antwoord van AI
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();
}
}
}