Junior — Middle
94
Можеш ли да дадеш пример коришћења оптимистичке блокаде у Јави за спречавање конфликата при истовременом приступу подацима?
Одговор од АИ
sobes.tech АИ
Оптимистическая блокировка в 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) {
// Обработка конфликта обновления
}
Таким образом, если два потока одновременно пытаются обновить один и тот же объект, только первый успешно сохранит изменения, а второй получит ошибку и сможет повторить операцию с актуальными данными.