ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/jsr166e/DoubleMaxUpdater.java
(Generate patch)

Comparing jsr166/src/jsr166e/DoubleMaxUpdater.java (file contents):
Revision 1.4 by jsr166, Sat Oct 15 21:29:34 2011 UTC vs.
Revision 1.10 by dl, Sun May 4 22:38:19 2014 UTC

# Line 5 | Line 5
5   */
6  
7   package jsr166e;
8 import java.io.IOException;
8   import java.io.Serializable;
10 import java.io.ObjectInputStream;
11 import java.io.ObjectOutputStream;
9  
10   /**
11   * One or more variables that together maintain a running {@code double}
# Line 19 | Line 16 | import java.io.ObjectOutputStream;
16   * current maximum across the variables maintaining updates.
17   *
18   * <p>This class extends {@link Number}, but does <em>not</em> define
19 < * methods such as {@code hashCode} and {@code compareTo} because
20 < * instances are expected to be mutated, and so are not useful as
21 < * collection keys.
19 > * methods such as {@code equals}, {@code hashCode} and {@code
20 > * compareTo} because instances are expected to be mutated, and so are
21 > * not useful as collection keys.
22   *
23   * <p><em>jsr166e note: This class is targeted to be placed in
24 < * java.util.concurrent.atomic<em>
24 > * java.util.concurrent.atomic.</em>
25   *
26   * @since 1.8
27   * @author Doug Lea
# Line 60 | Line 57 | public class DoubleMaxUpdater extends St
57       */
58      public void update(double x) {
59          long lx = Double.doubleToRawLongBits(x);
60 <        Cell[] as; long b, v; HashCode hc; Cell a; int n;
60 >        Cell[] as; long b, v; int[] hc; Cell a; int n;
61          if ((as = cells) != null ||
62              (Double.longBitsToDouble(b = base) < x && !casBase(b, lx))) {
63              boolean uncontended = true;
64 <            int h = (hc = threadHashCode.get()).code;
65 <            if (as == null || (n = as.length) < 1 ||
66 <                (a = as[(n - 1) & h]) == null ||
64 >            if ((hc = threadHashCode.get()) == null ||
65 >                as == null || (n = as.length) < 1 ||
66 >                (a = as[(n - 1) & hc[0]]) == null ||
67                  (Double.longBitsToDouble(v = a.value) < x &&
68                   !(uncontended = a.cas(v, lx))))
69                  retryUpdate(lx, hc, uncontended);
# Line 75 | Line 72 | public class DoubleMaxUpdater extends St
72  
73      /**
74       * Returns the current maximum.  The returned value is
75 <     * <em>NOT</em> an atomic snapshot: Invocation in the absence of
75 >     * <em>NOT</em> an atomic snapshot; invocation in the absence of
76       * concurrent updates returns an accurate result, but concurrent
77       * updates that occur while the value is being calculated might
78       * not be incorporated.
# Line 185 | Line 182 | public class DoubleMaxUpdater extends St
182          s.writeDouble(max());
183      }
184  
185 <    private void readObject(ObjectInputStream s)
186 <        throws IOException, ClassNotFoundException {
185 >    private void readObject(java.io.ObjectInputStream s)
186 >        throws java.io.IOException, ClassNotFoundException {
187          s.defaultReadObject();
188          busy = 0;
189          cells = null;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines