Java volatile array?
AtomicLongArray, AtomicIntegerArray, AtomicReferenceArray (java.util.concurrent.atomic).
Declaring an array volatile does not give volatile access to its fields. You're declaring the reference itself volatile, not its elements.
In other words, you're declaring a volatile set of elements, not a set of volatile elements.
The solution here is to use AtomicIntegerArray
in case you want to use integers. Another way (but kinda ugly) is to rewrite the reference to the array every time you edit a field.
You do that by:
arr = arr;
(as I said... ugly)