Java

Какое предназначение класса AtomicInteger?

Понятно, для чего нужен AtomicLong. Оно создано специально для типа long, так как long не является атомарным.
Но зачем уже AtomicInteger?! Для меня это слишком абстрактное понятие. Для остальных примитивных типов, кроме double, ключевое слово volatile не нужно, так как они и так являются атомарными.
Нельзя было просто ограничиться классами AtomicLong и AtomicDouble?
Чтобы увеличить значение переменной, RISC-процессору требуется выполнить минимум 3 инструкции. О какой атомарности int может идти речь?

https://tproger.ru/translations/java8-concurrency-tutorial-3/ - об AtomicInteger и не только.
Алексей Садовин
Алексей Садовин
50 820
Лучший ответ
> Для остальных примитивных типов, кроме double, ключевое слово volatile не нужно, так как они и так являются атомарными.

Никакой тип не является атомарным, за исключением собственно атомарных типов, содержащих специальное на то указание: AtomicBoolean, AtomicInteger и прочего. Некоторые команды виртуальной машины могут быть атомарными, типа доступа к памяти, но это далеко не все действия совершаемые над типом.

Ключевое слово volatile нужно, когда нужна волатильность соответствующего кода. К типам данных и к атомарности прямого отношения оно не имеет.
Так атомарность это другое. При чем тут число и атомарные операции? В том и суть, что это операции, которые оперируют над самим числом. Операция может быть х = 1 + 2 + 4 или х = 1.0 + 2.0 + 4.0, а может быть такой х = 7 или х = 7.0. В первом случае операция осуществляется последовательно:
1) 1 + 2
2) (1+2) + 4
Во втором случае она происходит мгновенно. То есть атом - неделимая частица - так и тут х = 7 неделимая операция, то есть она состоит из одного присваивания, не более.

Также вопрос я понял и по-другому, ага). Для чего нужен AtomicInteger, если можно в АtomicLong закастить переменную до long. Ну, во-первых, память. Зачем придумали int, если есть long? А зачем тогда byte? Зачем всё это, если есть Number? Во-вторых не будет. Я всё
ОА
Олег Агапов
11 272
Александр Коротин Так для атомарных операций для чисел можно использовать volatile и синхронизированные методы и не засорять память компьютера излишним объектом.