Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: balance, concurrency, transaction

Как спроектировать доступ к балансам пользователей из разных потоков, чтобы операции были консистентны?

Вопрос проверяет умение проектировать потокобезопасный доступ к финансовым данным.

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

Используйте:

  1. AtomicLong для простых случаев.

  2. ReadWriteLock для частого чтения и редкой записи.

  3. Транзакции в БД для сложных операций.

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

1. AtomicLong:

ConcurrentHashMap<Long, AtomicLong> balances = new ConcurrentHashMap<>();
balances.computeIfAbsent(userId, k -> new AtomicLong(0)).addAndGet(amount);

2. ReadWriteLock:

ReadWriteLock lock = new ReentrantReadWriteLock();
lock.writeLock().lock();
try {
    	// Изменение баланса
} finally {
    	lock.writeLock().unlock();
}

Уровень

  • Рейтинг:

    2

  • Сложность:

    6

Навыки

  • Java

    Java

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

#balance

#concurrency

#transaction

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