Sobes.tech
Назад к вопросам
Junior — Middle
69

Каким образом реализуется механизм Optimistic Locking и в чем его принципиальные отличия от других видов блокировок?

Компании, где спрашивали
AstonAston

Ответ от нейросети

sobes.tech AI

Optimistic Locking — это механизм управления конкурентным доступом к данным, при котором блокировка не устанавливается заранее. Вместо этого система предполагает, что конфликты редки, и позволяет нескольким транзакциям работать параллельно. Перед сохранением изменений проверяется, не изменились ли данные с момента их чтения.

Принцип работы:

  1. При чтении данных сохраняется версия или контрольная сумма (например, поле version).
  2. При попытке обновления проверяется, совпадает ли текущая версия в базе с сохранённой.
  3. Если версии совпадают, обновление происходит с увеличением версии.
  4. Если версии не совпадают — значит, данные изменились параллельно, и операция откатывается или повторяется.

Отличия от других видов блокировок:

  • В отличие от Pessimistic Locking (пессимистичной блокировки), где данные блокируются на время транзакции, Optimistic Locking не блокирует данные, что повышает параллелизм.
  • Подходит для систем с низкой конкуренцией, где конфликты редки.

Пример на Java с использованием поля version:

@Entity
public class Product {
    @Id
    private Long id;

    @Version
    private Integer version;

    private String name;
    // геттеры и сеттеры
}

При обновлении JPA автоматически проверит версию и выбросит исключение, если данные были изменены другим транзакционным потоком.