--- jsr166/src/jsr166e/DoubleMaxUpdater.java 2013/01/06 18:50:00 1.7 +++ jsr166/src/jsr166e/DoubleMaxUpdater.java 2014/05/05 20:20:15 1.12 @@ -5,10 +5,11 @@ */ package jsr166e; + import java.io.IOException; -import java.io.Serializable; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; +import java.io.Serializable; /** * One or more variables that together maintain a running {@code double} @@ -60,13 +61,13 @@ public class DoubleMaxUpdater extends St */ public void update(double x) { long lx = Double.doubleToRawLongBits(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 || (Double.longBitsToDouble(b = base) < x && !casBase(b, lx))) { 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 || (Double.longBitsToDouble(v = a.value) < x && !(uncontended = a.cas(v, lx)))) retryUpdate(lx, hc, uncontended); @@ -75,7 +76,7 @@ public class DoubleMaxUpdater extends St /** * Returns the current maximum. The returned value is - * NOT an atomic snapshot: invocation in the absence of + * NOT an atomic snapshot; invocation in the absence of * concurrent updates returns an accurate result, but concurrent * updates that occur while the value is being calculated might * not be incorporated. @@ -179,14 +180,13 @@ public class DoubleMaxUpdater extends St return (float)max(); } - private void writeObject(java.io.ObjectOutputStream s) - throws java.io.IOException { + private void writeObject(ObjectOutputStream s) throws IOException { s.defaultWriteObject(); s.writeDouble(max()); } private void readObject(ObjectInputStream s) - throws IOException, ClassNotFoundException { + throws IOException, ClassNotFoundException { s.defaultReadObject(); busy = 0; cells = null;