--- jsr166/src/jsr166e/DoubleAdder.java 2013/01/06 18:50:00 1.7 +++ jsr166/src/jsr166e/DoubleAdder.java 2014/05/04 22:38:19 1.11 @@ -5,10 +5,7 @@ */ package jsr166e; -import java.io.IOException; import java.io.Serializable; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; /** * One or more variables that together maintain an initially zero @@ -62,15 +59,15 @@ public class DoubleAdder extends Striped * @param x the value to add */ public void add(double x) { - Cell[] as; long b, v; HashCode hc; Cell a; int n; + Cell[] as; long b, v; int[] hc; Cell a; int n; if ((as = cells) != null || !casBase(b = base, Double.doubleToRawLongBits (Double.longBitsToDouble(b) + x))) { boolean uncontended = true; - int h = (hc = threadHashCode.get()).code; - if (as == null || (n = as.length) < 1 || - (a = as[(n - 1) & h]) == null || + if ((hc = threadHashCode.get()) == null || + as == null || (n = as.length) < 1 || + (a = as[(n - 1) & hc[0]]) == null || !(uncontended = a.cas(v = a.value, Double.doubleToRawLongBits (Double.longBitsToDouble(v) + x)))) @@ -80,10 +77,10 @@ public class DoubleAdder extends Striped /** * Returns the current sum. The returned value is NOT an - * atomic snapshot: invocation in the absence of concurrent + * atomic snapshot; invocation in the absence of concurrent * updates returns an accurate result, but concurrent updates that * occur while the sum is being calculated might not be - * incorporated. Also, because double-precision arithmetic is not + * incorporated. Also, because floating-point arithmetic is not * strictly associative, the returned result need not be identical * to the value that would be obtained in a sequential series of * updates to a single variable. @@ -190,8 +187,8 @@ public class DoubleAdder extends Striped s.writeDouble(sum()); } - private void readObject(ObjectInputStream s) - throws IOException, ClassNotFoundException { + private void readObject(java.io.ObjectInputStream s) + throws java.io.IOException, ClassNotFoundException { s.defaultReadObject(); busy = 0; cells = null;