Встречается на собеседованиях • сегодня

Как устроена оптимистическая блокировка

Оптимистическая блокировка предполагает, что конфликты при изменении данных редки. Вместо блокировки записи перед изменением, каждый поток проверяет, не изменились ли данные с момента их чтения.

Реализация через версию:

  1. Добавляем поле version в сущность.
  2. При чтении запоминаем версию.
  3. При обновлении проверяем, что версия не изменилась, и инкрементируем её.
java
@Entity
public class Account {
    @Id
    private Long id;
    private BigDecimal balance;
    @Version
    private int version;
    // геттеры/сеттеры
}

При конфликте JPA выбрасывает OptimisticLockException. Альтернатива - ручная проверка:

java
UPDATE account 
SET balance = :newBalance, version = version + 1 
WHERE id = :id AND version = :oldVersion

Преимущества: нет блокировок, высокая производительность при низкой конкуренции. Недостаток: нужно обрабатывать конфликты.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы