ZetCode

Java AtomicInteger

last modified May 25, 2025

In this article, we work with Java's AtomicInteger.

AtomicInteger provides an integer variable that can be read and written atomically. It ensures that operations on the variable are thread-safe, preventing issues like lost updates in concurrent environments.

AtomicInteger is a class within the java.util.concurrent.atomic package that provides an atomic and thread-safe way to represent and manipulate an integer primitive data type.

AtomicInteger is a synchronization primitive. It provides atomic operations for integer values, ensuring thread-safe access and modification. Unlike traditional locks, which can introduce performance overhead, AtomicInteger leverages low-level atomic instructions to maintain data consistency without blocking threads. Its primary purpose is to handle concurrent updates efficiently while avoiding race conditions.

Key characteristics:

Benefits of using AtomicInteger:

Use cases for AtomicInteger:

Counter example

In the next example, we generate 500 threads. Each thread increments a counter.

Main.java
class Counter {

    private final AtomicInteger counter = new AtomicInteger(0);

    public void inc() {

        counter.getAndIncrement();
    }

    public int get() {

        return counter.get();
    }
}

void main() throws InterruptedException {

    final Counter counter = new Counter();

    // 500 threads
    for (int i = 0; i < 500; i++){

        var thread = new Thread(counter::inc);

        thread.start();
    }

    // sleep three seconds
    Thread.sleep(3000);

    System.out.println("Value: " + counter.get());
}

In the end, the counter should be 500.

private final AtomicInteger counter = new AtomicInteger(0);

The counter is an AtomicInteger initiated to 0.

public void inc() {

    counter.getAndIncrement();
}

The inc method increments the counter safely.

public int get() {

    return counter.get();
}

The get method returns the current value of the counter.

Source

Java AtomicInteger - language reference

In this article we have worked with AtomicInteger in Java.

Author

My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.

List all Java tutorials.