Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

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

Как работает механизм CAS (Compare-And-Swap) внутри Atomicклассов?

Объясняет низкоуровневый механизм атомарных операций.

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

CAS — атомарная инструкция процессора, которая обновляет значение в памяти, только если текущее значение совпадает с ожидаемым (expectedValue). При несовпадении операция повторяется. Это основа Atomic-классов.

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

Алгоритм CAS:

  1. Прочитать текущее значение A из памяти.

  2. Вычислить новое значение B = A + 1.

  3. Выполнить CAS: если значение в памяти == A, заменить на B. Иначе — повторить.

Реализация в AtomicInteger:

public final int incrementAndGet() {
    	int prev, next;
    	do {
        	prev = get();          // Текущее значение
        	next = prev + 1;       // Новое значение
    	} while (!compareAndSet(prev, next)); // CAS-цикл
    	return next;
}

Аппаратная поддержка:

  • В x86: инструкция CMPXCHG.

Проблемы CAS:

  • ABA-проблема: Значение меняется с A → B → A, но поток не видит изменений. Решение — AtomicStampedReference.

  • Циклы при высокой конкуренции: Многократные повторы снижают производительность.

Вывод: CAS — эффективная альтернатива блокировкам для простых операций.

Уровень

  • Рейтинг:

    2

  • Сложность:

    6

Навыки

  • Java

    Java

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

#cas

#atomic

#concurrency

#hardware

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