Is there a way to declare array elements volatile
in Java? I.e.
volatile int[] a = new int[10];
declares the array reference volatile
, but the array elements (e.g. a[1]
) are still not volatile. So I'm looking for something like
volatile int[] a = new volatile int[10];
but it doesn't work that way. Is it possible at all?
Use AtomicIntegerArray
or AtomicLongArray
or AtomicReferenceArray
The AtomicIntegerArray
class implements an int array whose individual fields can be accessed with volatile semantics, via the class's get()
and set()
methods. Calling arr.set(x, y)
from one thread will then guarantee that another thread calling arr.get(x)
will read the value y (until another value is read to position x).
See: