Встречается на собеседованиях • сегодня
Как устроена оптимистическая блокировка
Оптимистическая блокировка предполагает, что конфликты при изменении данных редки. Вместо блокировки записи перед изменением, каждый поток проверяет, не изменились ли данные с момента их чтения.
Реализация через версию:
- Добавляем поле
versionв сущность. - При чтении запоминаем версию.
- При обновлении проверяем, что версия не изменилась, и инкрементируем её.
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Преимущества: нет блокировок, высокая производительность при низкой конкуренции. Недостаток: нужно обрабатывать конфликты.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы