Назад к вопросам
Aston
Junior — Middle
69
Каким образом реализуется механизм Optimistic Locking и в чем его принципиальные отличия от других видов блокировок?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Optimistic Locking — это механизм управления конкурентным доступом к данным, при котором блокировка не устанавливается заранее. Вместо этого система предполагает, что конфликты редки, и позволяет нескольким транзакциям работать параллельно. Перед сохранением изменений проверяется, не изменились ли данные с момента их чтения.
Принцип работы:
- При чтении данных сохраняется версия или контрольная сумма (например, поле version).
- При попытке обновления проверяется, совпадает ли текущая версия в базе с сохранённой.
- Если версии совпадают, обновление происходит с увеличением версии.
- Если версии не совпадают — значит, данные изменились параллельно, и операция откатывается или повторяется.
Отличия от других видов блокировок:
- В отличие от Pessimistic Locking (пессимистичной блокировки), где данные блокируются на время транзакции, Optimistic Locking не блокирует данные, что повышает параллелизм.
- Подходит для систем с низкой конкуренцией, где конфликты редки.
Пример на Java с использованием поля version:
@Entity
public class Product {
@Id
private Long id;
@Version
private Integer version;
private String name;
// геттеры и сеттеры
}
При обновлении JPA автоматически проверит версию и выбросит исключение, если данные были изменены другим транзакционным потоком.