rt/emul/compact/src/main/java/java/util/concurrent/atomic/AtomicReference.java
changeset 1338 aa70afac4eca
parent 1334 588d5bf7a560
     1.1 --- a/rt/emul/compact/src/main/java/java/util/concurrent/atomic/AtomicReference.java	Thu Oct 03 15:40:35 2013 +0200
     1.2 +++ b/rt/emul/compact/src/main/java/java/util/concurrent/atomic/AtomicReference.java	Fri Oct 04 10:52:01 2013 +0200
     1.3 @@ -34,7 +34,6 @@
     1.4   */
     1.5  
     1.6  package java.util.concurrent.atomic;
     1.7 -import sun.misc.Unsafe;
     1.8  
     1.9  /**
    1.10   * An object reference that may be updated atomically. See the {@link
    1.11 @@ -47,16 +46,6 @@
    1.12  public class AtomicReference<V>  implements java.io.Serializable {
    1.13      private static final long serialVersionUID = -1848883965231344442L;
    1.14  
    1.15 -    private static final Unsafe unsafe = Unsafe.getUnsafe();
    1.16 -    private static final long valueOffset;
    1.17 -
    1.18 -    static {
    1.19 -      try {
    1.20 -        valueOffset = unsafe.objectFieldOffset
    1.21 -            (AtomicReference.class.getDeclaredField("value"));
    1.22 -      } catch (Exception ex) { throw new Error(ex); }
    1.23 -    }
    1.24 -
    1.25      private volatile V value;
    1.26  
    1.27      /**
    1.28 @@ -99,7 +88,7 @@
    1.29       * @since 1.6
    1.30       */
    1.31      public final void lazySet(V newValue) {
    1.32 -        unsafe.putOrderedObject(this, valueOffset, newValue);
    1.33 +        value = newValue;
    1.34      }
    1.35  
    1.36      /**
    1.37 @@ -111,7 +100,12 @@
    1.38       * the actual value was not equal to the expected value.
    1.39       */
    1.40      public final boolean compareAndSet(V expect, V update) {
    1.41 -        return unsafe.compareAndSwapObject(this, valueOffset, expect, update);
    1.42 +        if (value == expect) {
    1.43 +            value = update;
    1.44 +            return true;
    1.45 +        } else {
    1.46 +            return false;
    1.47 +        }
    1.48      }
    1.49  
    1.50      /**
    1.51 @@ -127,7 +121,7 @@
    1.52       * @return true if successful.
    1.53       */
    1.54      public final boolean weakCompareAndSet(V expect, V update) {
    1.55 -        return unsafe.compareAndSwapObject(this, valueOffset, expect, update);
    1.56 +        return compareAndSet(expect, update);
    1.57      }
    1.58  
    1.59      /**