Назад к вопросам
Junior — Middle
53
Можешь привести пример использования оптимистической блокировки в Java для предотвращения конфликтов при одновременном доступе к данным?
Ответ от нейросети
sobes.tech AI
Оптимистическая блокировка в Java часто реализуется с помощью версии данных, которая проверяется перед сохранением изменений. Например, в JPA можно использовать аннотацию @Version для поля, которое автоматически увеличивается при каждом обновлении. При попытке сохранить данные с устаревшей версией выбрасывается исключение, что предотвращает перезапись изменений, сделанных параллельно.
Пример:
@Entity
public class Product {
@Id
private Long id;
private String name;
@Version
private int version;
// геттеры и сеттеры
}
// В сервисе:
try {
product.setName("New Name");
entityManager.merge(product);
} catch (OptimisticLockException e) {
// Обработка конфликта обновления
}
Таким образом, если два потока одновременно пытаются обновить один и тот же объект, только первый успешно сохранит изменения, а второй получит ошибку и сможет повторить операцию с актуальными данными.