Inspectopedia Help

'AtomicFieldUpdater' field not declared 'static final'

Reports fields of types:

  • java.util.concurrent.atomic.AtomicLongFieldUpdater

  • java.util.concurrent.atomic.AtomicIntegerFieldUpdater

  • java.util.concurrent.atomic.AtomicReferenceFieldUpdater

that are not static final. Because only one atomic field updater is needed for updating a volatile field in all instances of a class, it can almost always be static.

Making the updater final allows the JVM to optimize access for improved performance.

Example:

class Main { private volatile int id; private AtomicIntegerFieldUpdater<Main> idFieldUpdater = AtomicIntegerFieldUpdater.newUpdater(Main.class, "id"); }

After the quick-fix is applied:

class Main { private volatile int id; private static final AtomicIntegerFieldUpdater<Main> idFieldUpdater = AtomicIntegerFieldUpdater.newUpdater(Main.class, "id"); }

Inspection Details

Available in:

IntelliJ IDEA 2023.3, Qodana for JVM 2023.3

Plugin:

Java, 233.SNAPSHOT

Last modified: 13 July 2023