--- jsr166/src/jsr166e/DoubleMaxUpdater.java 2013/01/07 07:14:01 1.8
+++ jsr166/src/jsr166e/DoubleMaxUpdater.java 2014/05/05 20:20:15 1.12
@@ -5,6 +5,10 @@
*/
package jsr166e;
+
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.io.Serializable;
/**
@@ -57,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);
@@ -72,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.
@@ -176,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(java.io.ObjectInputStream s)
- throws java.io.IOException, ClassNotFoundException {
+ private void readObject(ObjectInputStream s)
+ throws IOException, ClassNotFoundException {
s.defaultReadObject();
busy = 0;
cells = null;