Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: atomicity, synchronization

Как обеспечить атомарность операций в многопоточном коде?

Этот вопрос проверяет знание инструментов Java для безопасной работы с общими данными в многопоточной среде.

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

Атомарность обеспечивается с помощью синхронизации, блокировок или атомарных классов. Самый простой способ — synchronized. Более гибкий вариант — Lock. Для счётчиков и простых операций лучше использовать классы из java.util.concurrent.atomic. Выбор подхода зависит от задачи и требований к производительности.

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

Что такое атомарность

Атомарность означает, что операция выполняется:

  • целиком

  • неделимо

  • без вмешательства других потоков

Основные способы обеспечения атомарности

Перед выбором подхода важно оценить сложность операции и нагрузку.

synchronized

Самый базовый и надёжный способ.

synchronized void increment() {
    counter++;
}

Особенности:

  • прост в использовании

  • может снижать производительность

  • блокирует потоки на уровне монитора

Lock (ReentrantLock)

Более гибкая альтернатива.

lock.lock();
try {
    counter++;
} finally {
    lock.unlock();
}

Преимущества:

  • tryLock

  • таймауты

  • явный контроль блокировки

Атомарные классы

Подходят для простых операций без сложной логики.

AtomicInteger counter = new AtomicInteger();
counter.incrementAndGet();

Особенности:

  • не используют блокировки

  • основаны на CAS

  • хорошо масштабируются

Когда что использовать

  • Простые счётчики → Atomic*

  • Критические секции → synchronized

  • Сложная логика → Lock

Вывод

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    8

Навыки

  • Java

    Java

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

#atomicity

#synchronization

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