--- jsr166/src/jsr166e/extra/AtomicDoubleArray.java 2011/10/25 19:21:27 1.4
+++ jsr166/src/jsr166e/extra/AtomicDoubleArray.java 2013/03/04 16:09:25 1.9
@@ -14,7 +14,7 @@ import static java.lang.Double.longBitsT
* See the {@link java.util.concurrent.atomic} package specification
* for description of the properties of atomic variables.
*
- *
This class compares primitive {@code double}
+ * This class compares primitive {@code double}
* values in methods such as {@link #compareAndSet} by comparing their
* bitwise representation using {@link Double#doubleToRawLongBits},
* which differs from both the primitive double {@code ==} operator
@@ -162,11 +162,11 @@ public class AtomicDoubleArray implement
* if the current value is bitwise equal
* to the expected value.
*
- *
May
- * fail spuriously
- * and does not provide ordering guarantees, so is only rarely an
- * appropriate alternative to {@code compareAndSet}.
+
+ * May fail spuriously and does not provide ordering guarantees
,
+ * so is only rarely an appropriate alternative to {@code compareAndSet}.
*
* @param i the index
* @param expect the expected value
@@ -242,7 +242,7 @@ public class AtomicDoubleArray implement
* of its elements (each a {@code double}) in the proper order.
*/
private void writeObject(java.io.ObjectOutputStream s)
- throws java.io.IOException{
+ throws java.io.IOException {
s.defaultWriteObject();
// Write out array length
@@ -300,21 +300,23 @@ public class AtomicDoubleArray implement
private static sun.misc.Unsafe getUnsafe() {
try {
return sun.misc.Unsafe.getUnsafe();
- } catch (SecurityException se) {
- try {
- return java.security.AccessController.doPrivileged
- (new java.security
- .PrivilegedExceptionAction() {
- public sun.misc.Unsafe run() throws Exception {
- java.lang.reflect.Field f = sun.misc
- .Unsafe.class.getDeclaredField("theUnsafe");
- f.setAccessible(true);
- return (sun.misc.Unsafe) f.get(null);
- }});
- } catch (java.security.PrivilegedActionException e) {
- throw new RuntimeException("Could not initialize intrinsics",
- e.getCause());
- }
+ } catch (SecurityException tryReflectionInstead) {}
+ try {
+ return java.security.AccessController.doPrivileged
+ (new java.security.PrivilegedExceptionAction() {
+ public sun.misc.Unsafe run() throws Exception {
+ Class k = sun.misc.Unsafe.class;
+ for (java.lang.reflect.Field f : k.getDeclaredFields()) {
+ f.setAccessible(true);
+ Object x = f.get(null);
+ if (k.isInstance(x))
+ return k.cast(x);
+ }
+ throw new NoSuchFieldError("the Unsafe");
+ }});
+ } catch (java.security.PrivilegedActionException e) {
+ throw new RuntimeException("Could not initialize intrinsics",
+ e.getCause());
}
}
}