Может кто-нибудь объяснить, для чего используется AtomicLong? Например, какая разница в приведенных ниже инструкциях?
private Long transactionId;
private AtomicLong transactionId;
Ответ 1
Между этими двумя объектами существуют значительные различия, хотя чистый результат один и тот же, они определенно очень разные и используются в самых разных обстоятельствах.
Вы используете базовый объект Long, если:
Вам нужен класс-оболочка
Вы работаете с коллекцией
Вы хотите иметь дело только с объектами, а не с примитивами (которые не работают)
Вы используете AtomicLong, когда:
Вы должны гарантировать, что значение может использоваться в параллельной среде.
Вам не нужен класс-оболочка (поскольку этот класс не будет автобокс)
Long сам по себе не позволяет взаимодействовать с потоком, поскольку два потока могут видеть и обновлять одно и то же значение, но с AtomicLong, есть довольно приличные гарантии вокруг значения, которое видят несколько потоков.
Эффективно, если вы не будете работать с потоками, вам не нужно будет использовать AtomicLong.