AtomicReferenceArraypublic class AtomicReferenceArray extends Object implements SerializableAn array of object references in which elements may be updated
atomically. See the {@link java.util.concurrent.atomic} package
specification for description of the properties of atomic
variables. |
Fields Summary |
---|
private static final long | serialVersionUID | private static final Unsafe | unsafe | private static final int | base | private static final int | scale | private final Object[] | array |
Constructors Summary |
---|
public AtomicReferenceArray(int length)Create a new AtomicReferenceArray of given length.
array = new Object[length];
// must perform at least one volatile write to conform to JMM
if (length > 0)
unsafe.putObjectVolatile(array, rawIndex(0), null);
| public AtomicReferenceArray(E[] array)Create a new AtomicReferenceArray with the same length as, and
all elements copied from, the given array.
if (array == null)
throw new NullPointerException();
int length = array.length;
this.array = new Object[length];
if (length > 0) {
int last = length-1;
for (int i = 0; i < last; ++i)
this.array[i] = array[i];
// Do the last write as volatile
E e = array[last];
unsafe.putObjectVolatile(this.array, rawIndex(last), e);
}
|
Methods Summary |
---|
public final boolean | compareAndSet(int i, E expect, E update)Atomically set the value to the given updated value
if the current value == the expected value.
return unsafe.compareAndSwapObject(array, rawIndex(i),
expect, update);
| public final E | get(int i)Get the current value at position i.
return (E) unsafe.getObjectVolatile(array, rawIndex(i));
| public final E | getAndSet(int i, E newValue)Set the element at position i to the given value and return the
old value.
while (true) {
E current = get(i);
if (compareAndSet(i, current, newValue))
return current;
}
| public final int | length()Returns the length of the array.
return array.length;
| private long | rawIndex(int i)
if (i < 0 || i >= array.length)
throw new IndexOutOfBoundsException("index " + i);
return base + i * scale;
| public final void | set(int i, E newValue)Set the element at position i to the given value.
unsafe.putObjectVolatile(array, rawIndex(i), newValue);
| public java.lang.String | toString()Returns the String representation of the current values of array.
if (array.length > 0) // force volatile read
get(0);
return Arrays.toString(array);
| public final boolean | weakCompareAndSet(int i, E expect, E update)Atomically set the value to the given updated value
if the current value == the expected value.
May fail spuriously.
return compareAndSet(i, expect, update);
|
|