Back to questions
ВТБ
Junior — Middle
55
Объясните, что такое ReentrantLock и как он отличается от стандартных механизмов синхронизации в Java.
Companies where asked
Answer from AI
sobes.tech AI
ReentrantLock — это класс из пакета java.util.concurrent.locks, который реализует механизм блокировки с возможностью повторного захвата (reentrant). Это значит, что поток, который уже захватил блокировку, может сделать это снова без блокировки самого себя.
Отличия от стандартного synchronized:
- Гибкость: ReentrantLock позволяет явно захватывать и освобождать блокировку с помощью методов lock() и unlock(), тогда как synchronized работает через блоки или методы.
- Возможность прерывания: можно попытаться захватить блокировку с возможностью прерывания (lockInterruptibly()), чего нет у synchronized.
- Попытка захвата без ожидания: tryLock() позволяет попытаться захватить блокировку и сразу получить результат, не блокируясь.
- Поддержка условий: ReentrantLock поддерживает объекты Condition для более тонкой работы с ожиданием и уведомлением.
Пример использования 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() {
return count;
}
}