Понятно, для чего нужен AtomicLong. Оно создано специально для типа long, так как long не является атомарным.
Но зачем уже AtomicInteger?! Для меня это слишком абстрактное понятие. Для остальных примитивных типов, кроме double, ключевое слово volatile не нужно, так как они и так являются атомарными.
Нельзя было просто ограничиться классами AtomicLong и AtomicDouble?
Java
Какое предназначение класса AtomicInteger?
Чтобы увеличить значение переменной, RISC-процессору требуется выполнить минимум 3 инструкции. О какой атомарности int может идти речь?
https://tproger.ru/translations/java8-concurrency-tutorial-3/ - об AtomicInteger и не только.
https://tproger.ru/translations/java8-concurrency-tutorial-3/ - об AtomicInteger и не только.
> Для остальных примитивных типов, кроме double, ключевое слово volatile не нужно, так как они и так являются атомарными.
Никакой тип не является атомарным, за исключением собственно атомарных типов, содержащих специальное на то указание: AtomicBoolean, AtomicInteger и прочего. Некоторые команды виртуальной машины могут быть атомарными, типа доступа к памяти, но это далеко не все действия совершаемые над типом.
Ключевое слово 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? Во-вторых не будет. Я всё
1) 1 + 2
2) (1+2) + 4
Во втором случае она происходит мгновенно. То есть атом - неделимая частица - так и тут х = 7 неделимая операция, то есть она состоит из одного присваивания, не более.
Также вопрос я понял и по-другому, ага). Для чего нужен AtomicInteger, если можно в АtomicLong закастить переменную до long. Ну, во-первых, память. Зачем придумали int, если есть long? А зачем тогда byte? Зачем всё это, если есть Number? Во-вторых не будет. Я всё
Александр Коротин
Так для атомарных операций для чисел можно использовать volatile и синхронизированные методы и не засорять память компьютера излишним объектом.
Похожие вопросы
- Можно ли реализовать полиморфизм (Java) с общим конструктором для разных дочерних классов?
- как правильней организовывать абстрактный класс JAVA
- Абстрактный класс или интерфейс (java)
- Чем абстрактный класс отличается от интерфейса?
- Стоит ли во всех случаях сделать методы класса статичным, если они не используют абсолютно никакое поле класса?
- какая разница между интерфейсом и абстрактным классом? И есть она принципиальная ?. Приведите примеры.
- Как обратиться к объектам другого класса
- Java методы классы
- Подскажите зачем в Яве интерфейсы и абстрактные классы
- Зачем в Java придумали абстрактные классы?