Для чего используется AtomicLong для Java?

Может кто-нибудь объяснить, для чего используется AtomicLong? Например, какая разница в приведенных ниже инструкциях?

private Long transactionId;
private AtomicLong transactionId;

Ответ 1

Между этими двумя объектами существуют значительные различия, хотя чистый результат один и тот же, они определенно очень разные и используются в самых разных обстоятельствах.

Вы используете базовый объект Long, если:

  • Вам нужен класс-оболочка
  • Вы работаете с коллекцией
  • Вы хотите иметь дело только с объектами, а не с примитивами (которые не работают)

Вы используете AtomicLong, когда:

  • Вы должны гарантировать, что значение может использоваться в параллельной среде.
  • Вам не нужен класс-оболочка (поскольку этот класс не будет автобокс)

Long сам по себе не позволяет взаимодействовать с потоком, поскольку два потока могут видеть и обновлять одно и то же значение, но с AtomicLong, есть довольно приличные гарантии вокруг значения, которое видят несколько потоков.

Эффективно, если вы не будете работать с потоками, вам не нужно будет использовать AtomicLong.