ZetCode

Java AtomicLong

last modified July 10, 2024

In this article we work with Java's AtomicLong.

AtomicLong provides a long 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.

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

AtomicLong is a synchronization primitive. It provides atomic operations for long values, ensuring thread-safe access and modification. Unlike traditional locks, which can introduce performance overhead. AtomicLong 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 AtomicLong:

Use cases for AtomicLong:

Counter example

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

Main.java
import java.util.concurrent.atomic.AtomicLong;

class Counter {

    private final AtomicLong counter = new AtomicLong(0);

    public void inc() {

        counter.getAndIncrement();
    }

    public long 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 AtomicLong counter = new AtomicLong(0);

The counter is an AtomicLong initiated to 0.

public void inc() {

    counter.getAndIncrement();
}

The inc method increments the counters safely.

public long get() {

    return counter.get();
}

The get method returns the current value of the counter.

Source

Java AtomicLong - language reference

In this article we have worked with AtomicLong in Java.

Author

My name is Jan Bodnar and I am a passionate programmer with many years of programming experience. I have been writing programming articles since 2007. So far, I have written over 1400 articles and 8 e-books. I have over eight years of experience in teaching programming.

List all Java tutorials.