Junior — Middle
102
Pouvez-vous donner un exemple d'utilisation du verrouillage optimiste en Java pour éviter les conflits lors d'un accès concurrent aux données?
Réponse de l'IA
sobes.tech IA
Оптимистическая блокировка в 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) {
// Обработка конфликта обновления
}
Таким образом, если два потока одновременно пытаются обновить один и тот же объект, только первый успешно сохранит изменения, а второй получит ошибку и сможет повторить операцию с актуальными данными.