src/java.base/share/classes/java/util/concurrent/atomic/AtomicIntegerArray.java

Print this page
rev 12972 : 8140606: Update library code to use internal Unsafe
Reviewed-by: duke


  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) {