Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Spring: spring, locking

Как реализовать оптимистичную и пессимистичную блокировки в Spring?

Проверяет знание стратегий блокировок для управления конкурентным доступом к данным.

Короткий ответ

  • Оптимистичная блокировка: Использует версию записи (@Version). Проверяет конфликты только при коммите.

  • Пессимистичная блокировка: Блокирует запись на уровне БД (SELECT FOR UPDATE).

Длинный ответ

1. Оптимистичная блокировка:

  • Добавьте поле с аннотацией @Version:

    @Entity
    public class Account {
        @Id
        private Long id;
        private BigDecimal balance;
        @Version
        private Long version; // При конфликте выбрасывает OptimisticLockException
    }

2. Пессимистичная блокировка:

  • Используйте LockModeType.PESSIMISTIC_WRITE:

    @Repository
    public interface AccountRepository extends JpaRepository<Account, Long> {
        @Lock(LockModeType.PESSIMISTIC_WRITE)
        Account findById(Long id);
    }

Вывод:
Оптимистичная блокировка подходит для редких конфликтов, пессимистичная — для высококонкурентных сценариев.

Уровень

  • Рейтинг:

    1

  • Сложность:

    7

Навыки

  • Spring

    Spring

Ключевые слова

#spring

#locking

Подпишись на Java Developer в телеграм