32 * Expert Group and released to the public domain, as explained at
33 * http://creativecommons.org/publicdomain/zero/1.0/
34 */
35
36 package java.util.concurrent.atomic;
37
38 import java.util.function.IntBinaryOperator;
39 import java.util.function.IntUnaryOperator;
40
41 /**
42 * An {@code int} array in which elements may be updated atomically.
43 * See the {@link java.util.concurrent.atomic} package
44 * specification for description of the properties of atomic
45 * variables.
46 * @since 1.5
47 * @author Doug Lea
48 */
49 public class AtomicIntegerArray implements java.io.Serializable {
50 private static final long serialVersionUID = 2862133569453604235L;
51
52 private static final sun.misc.Unsafe U = sun.misc.Unsafe.getUnsafe();
53 private static final int ABASE;
54 private static final int ASHIFT;
55 private final int[] array;
56
57 static {
58 ABASE = U.arrayBaseOffset(int[].class);
59 int scale = U.arrayIndexScale(int[].class);
60 if ((scale & (scale - 1)) != 0)
61 throw new Error("array index scale not a power of two");
62 ASHIFT = 31 - Integer.numberOfLeadingZeros(scale);
63 }
64
65 private long checkedByteOffset(int i) {
66 if (i < 0 || i >= array.length)
67 throw new IndexOutOfBoundsException("index " + i);
68
69 return byteOffset(i);
70 }
71
72 private static long byteOffset(int i) {
|
32 * Expert Group and released to the public domain, as explained at
33 * http://creativecommons.org/publicdomain/zero/1.0/
34 */
35
36 package java.util.concurrent.atomic;
37
38 import java.util.function.IntBinaryOperator;
39 import java.util.function.IntUnaryOperator;
40
41 /**
42 * An {@code int} array in which elements may be updated atomically.
43 * See the {@link java.util.concurrent.atomic} package
44 * specification for description of the properties of atomic
45 * variables.
46 * @since 1.5
47 * @author Doug Lea
48 */
49 public class AtomicIntegerArray implements java.io.Serializable {
50 private static final long serialVersionUID = 2862133569453604235L;
51
52 private static final jdk.internal.misc.Unsafe U = jdk.internal.misc.Unsafe.getUnsafe();
53 private static final int ABASE;
54 private static final int ASHIFT;
55 private final int[] array;
56
57 static {
58 ABASE = U.arrayBaseOffset(int[].class);
59 int scale = U.arrayIndexScale(int[].class);
60 if ((scale & (scale - 1)) != 0)
61 throw new Error("array index scale not a power of two");
62 ASHIFT = 31 - Integer.numberOfLeadingZeros(scale);
63 }
64
65 private long checkedByteOffset(int i) {
66 if (i < 0 || i >= array.length)
67 throw new IndexOutOfBoundsException("index " + i);
68
69 return byteOffset(i);
70 }
71
72 private static long byteOffset(int i) {
|