Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

# java.util.concurrent.atomic

A small toolkit of classes that support lock-free thread-safe programming on single variables. Instances of Atomic classes maintain values that are accessed and updated using methods otherwise available for fields using associated atomic `https://developer.android.com/reference/java/lang/invoke/VarHandle` operations.

Instances of classes `https://developer.android.com/reference/java/util/concurrent/atomic/AtomicBoolean`, `https://developer.android.com/reference/java/util/concurrent/atomic/AtomicInteger`, `https://developer.android.com/reference/java/util/concurrent/atomic/AtomicLong`, and `https://developer.android.com/reference/java/util/concurrent/atomic/AtomicReference` each provide access and updates to a single variable of the corresponding type. Each class also provides appropriate utility methods for that type. For example, classes `AtomicLong` and `AtomicInteger` provide atomic increment methods. One application is to generate sequence numbers, as in:

    class Sequencer {
      private final AtomicLong sequenceNumber
        = new AtomicLong(17);
      public long next() {
        return sequenceNumber.getAndIncrement();
      }
    }

Arbitrary transformations of the contained value are provided both by low-level read-modify-write operations such as `compareAndSet` and by higher-level methods such as `getAndUpdate`.

These classes are not general purpose replacements for `java.lang.Integer` and related classes. They do *not* define methods such as `equals`, `hashCode` and `compareTo`. Because atomic variables are expected to be mutated, they are poor choices for hash table keys.

The `https://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerArray`, `https://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongArray`, and `https://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceArray` classes further extend atomic operation support to arrays of these types. These classes are also notable in providing `volatile` access semantics for their array elements.

In addition to classes representing single values and arrays, this package contains *Updater* classes that can be used to obtain `compareAndSet` and related operations on any selected `volatile` field of any selected class. These classes predate the introduction of `https://developer.android.com/reference/java/lang/invoke/VarHandle`, and are of more limited use. `https://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceFieldUpdater`, `https://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerFieldUpdater`, and `https://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongFieldUpdater` are reflection-based utilities that provide access to the associated field types. These are mainly of use in atomic data structures in which several `volatile` fields of the same node (for example, the links of a tree node) are independently subject to atomic updates. These classes enable greater flexibility in how and when to use atomic updates, at the expense of more awkward reflection-based setup, less convenient usage, and weaker guarantees.

The `https://developer.android.com/reference/java/util/concurrent/atomic/AtomicMarkableReference` class associates a single boolean with a reference. For example, this bit might be used inside a data structure to mean that the object being referenced has logically been deleted. The `https://developer.android.com/reference/java/util/concurrent/atomic/AtomicStampedReference` class associates an integer value with a reference. This may be used for example, to represent version numbers corresponding to series of updates.

## Classes

|---|---|
| [AtomicBoolean](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicBoolean) | A `boolean` value that may be updated atomically. |
| [AtomicInteger](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicInteger) | An `int` value that may be updated atomically. |
| [AtomicIntegerArray](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerArray) | An `int` array in which elements may be updated atomically. |
| [AtomicIntegerFieldUpdater](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerFieldUpdater)\<T\> | A reflection-based utility that enables atomic updates to designated `volatile int` fields of designated classes. |
| [AtomicLong](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicLong) | A `long` value that may be updated atomically. |
| [AtomicLongArray](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongArray) | A `long` array in which elements may be updated atomically. |
| [AtomicLongFieldUpdater](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongFieldUpdater)\<T\> | A reflection-based utility that enables atomic updates to designated `volatile long` fields of designated classes. |
| [AtomicMarkableReference](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicMarkableReference)\<V\> | An `AtomicMarkableReference` maintains an object reference along with a mark bit, that can be updated atomically. |
| [AtomicReference](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicReference)\<V\> | An object reference that may be updated atomically. |
| [AtomicReferenceArray](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceArray)\<E\> | An array of object references in which elements may be updated atomically. |
| [AtomicReferenceFieldUpdater](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceFieldUpdater)\<T, V\> | A reflection-based utility that enables atomic updates to designated `volatile` reference fields of designated classes. |
| [AtomicStampedReference](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicStampedReference)\<V\> | An `AtomicStampedReference` maintains an object reference along with an integer "stamp", that can be updated atomically. |
| [DoubleAccumulator](https://developer.android.com/reference/java/util/concurrent/atomic/DoubleAccumulator) | One or more variables that together maintain a running `double` value updated using a supplied function. |
| [DoubleAdder](https://developer.android.com/reference/java/util/concurrent/atomic/DoubleAdder) | One or more variables that together maintain an initially zero `double` sum. |
| [LongAccumulator](https://developer.android.com/reference/java/util/concurrent/atomic/LongAccumulator) | One or more variables that together maintain a running `long` value updated using a supplied function. |
| [LongAdder](https://developer.android.com/reference/java/util/concurrent/atomic/LongAdder) | One or more variables that together maintain an initially zero `long` sum. |

-

  ## Classes

  - [AtomicBoolean](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicBoolean)
  - [AtomicInteger](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicInteger)
  - [AtomicIntegerArray](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerArray)
  - [AtomicIntegerFieldUpdater](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerFieldUpdater)
  - [AtomicLong](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicLong)
  - [AtomicLongArray](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongArray)
  - [AtomicLongFieldUpdater](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongFieldUpdater)
  - [AtomicMarkableReference](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicMarkableReference)
  - [AtomicReference](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicReference)
  - [AtomicReferenceArray](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceArray)
  - [AtomicReferenceFieldUpdater](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceFieldUpdater)
  - [AtomicStampedReference](https://developer.android.com/reference/java/util/concurrent/atomic/AtomicStampedReference)
  - [DoubleAccumulator](https://developer.android.com/reference/java/util/concurrent/atomic/DoubleAccumulator)
  - [DoubleAdder](https://developer.android.com/reference/java/util/concurrent/atomic/DoubleAdder)
  - [LongAccumulator](https://developer.android.com/reference/java/util/concurrent/atomic/LongAccumulator)
  - [LongAdder](https://developer.android.com/reference/java/util/concurrent/atomic/LongAdder)