Sobes.tech
Назад к вопросам
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) {
    // Обработка конфликта обновления
}

Таким образом, если два потока одновременно пытаются обновить один и тот же объект, только первый успешно сохранит изменения, а второй получит ошибку и сможет повторить операцию с актуальными данными.