Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: concurrency, atomic, synchronization, cas

Отличие Atomic-классов от synchronized

Сравнивает подходы к thread-safe операциям и их применимость.

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

Atomic-классы (например, AtomicInteger) используют CAS (Compare-And-Swap) для атомарных операций без блокировок. synchronized блокирует весь объект. Atomic не подходит для составных операций (например, check-then-act).

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

Принцип работы:

  • synchronized: Блокирует монитор объекта, только один поток выполняет блок кода.

    public synchronized void increment() {
        	counter++; // Безопасно, но медленно при высокой конкуренции
    }
  • AtomicInteger: Использует CAS-процессорные инструкции:

    AtomicInteger atomicInt = new AtomicInteger(0);
    atomicInt.incrementAndGet(); // Неблокирующая операция

Когда Atomic не подходит:

  • Для зависимых операций:

    if (atomicInt.get() > 10) { // Поток А
        	atomicInt.set(0);        // Поток Б может изменить значение между get и set
    }

    Здесь нужен synchronized или ReentrantLock.

Плюсы Atomic:

  • Скорость: Нет накладных расходов на блокировки.

  • Удобство: Методы getAndUpdate(), accumulateAndGet() для атомарных вычислений.

Вывод: Используйте Atomic для простых атомарных операций, synchronized/Lock — для составных.

Уровень

  • Рейтинг:

    2

  • Сложность:

    6

Навыки

  • Java

    Java

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

#concurrency

#atomic

#synchronization

#cas

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