Сравнивает стратегии управления конкурентным доступом к данным.
Пессимистичные блокировки (например, SELECT FOR UPDATE) блокируют строки заранее. Оптимистичные проверяют конфликты при коммите через версии (например, version в JPA). Пессимистичные подходят для частых конфликтов, оптимистичные — для редких.
1. Пессимистичные блокировки:
@Lock(LockModeType.PESSIMISTIC_WRITE)
Book findById(Long id); // Блокирует строку в БДПлюсы: Гарантирует целостность при высокой конкуренции.
Минусы: Риск взаимоблокировок (deadlocks).
Сценарии: Банковские переводы, билетные системы.
2. Оптимистичные блокировки:
@Entity
public class Book {
@Version
private Long version; // Автоинкремент при изменении
}При коммите:
UPDATE book SET price = 200, version = 2
WHERE id = 1 AND version = 1; -- Если версия изменилась, возникнет OptimisticLockExceptionПлюсы: Нет блокировок, высокая пропускная способность.
Минусы: Повторные попытки при конфликтах.
Сценарии: Редактирование профилей, системы с низкой конкуренцией.
Вывод: Выбирайте стратегию на основе частоты конфликтов.