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 /**