LongAdder beats AtomicLong under heavy contention

LongAdder keeps per-thread cells and sums them on read, so hot counters avoid the compare-and-swap retry storm AtomicLong suffers.

Code
var adder = new LongAdder();
var pool = Executors.newFixedThreadPool(8);

for (int i = 0; i < 2000; i++) pool.submit(adder::increment);
pool.shutdown();
pool.awaitTermination(10, TimeUnit.SECONDS);

System.out.println("sum = " + adder.sum());
adder.add(100);
System.out.println("after add(100) = " + adder.sum());
Output
sum = 2000
after add(100) = 2100
Advertisement

Run this yourself in the Online Java Compiler, spin up a live REST API in the API Sandbox, or practise with Java interview questions.

Published 2026-07-30