Назад к вопросам
Junior — Middle
52
Как различаются типы блокировок и чем они отличаются друг от друга?
Ответ от нейросети
sobes.tech AI
В Java существует несколько типов блокировок, которые отличаются по уровню изоляции и влиянию на параллельность:
-
Оптимистичные блокировки (Optimistic Locking)
- Предполагают, что конфликтов при доступе к данным мало.
- Не блокируют ресурс при чтении, проверяют изменения при записи.
- Используются, например, в JPA с версионностью.
-
Пессимистичные блокировки (Pessimistic Locking)
- Блокируют ресурс при доступе, чтобы предотвратить конфликты.
- Могут быть эксклюзивными (write lock) или разделяемыми (read lock).
-
Монитор (synchronized)
- Встроенный механизм блокировки в Java.
- Гарантирует, что только один поток выполняет блок кода.
-
ReentrantLock
- Более гибкая блокировка из
java.util.concurrent.locks. - Позволяет попытаться захватить блокировку с таймаутом, прерывать ожидание.
- Более гибкая блокировка из
-
ReadWriteLock
- Позволяет нескольким потокам читать одновременно, но запись блокирует всех.
Отличия:
- Оптимистичные блокировки не блокируют ресурсы, а проверяют изменения при коммите.
- Пессимистичные блокировки блокируют ресурсы, предотвращая доступ другим потокам.
synchronized— простой встроенный механизм, но менее гибкий.ReentrantLockиReadWriteLockпредоставляют расширенные возможности управления блокировками.
Пример использования ReentrantLock:
ReentrantLock lock = new ReentrantLock();
lock.lock();
try {
// критическая секция
} finally {
lock.unlock();
}