--- jsr166/src/jsr166e/extra/AtomicDouble.java 2011/10/20 16:33:25 1.9 +++ jsr166/src/jsr166e/extra/AtomicDouble.java 2011/10/25 20:30:26 1.13 @@ -25,7 +25,7 @@ import static java.lang.Double.longBitsT * which differs from both the primitive double {@code ==} operator * and from {@link Double#equals}, as if implemented by: *
 {@code
- * boolean bitEquals(double x, double y) {
+ * static boolean bitEquals(double x, double y) {
  *   long xBits = Double.doubleToRawLongBits(x);
  *   long yBits = Double.doubleToRawLongBits(y);
  *   return xBits == yBits;
@@ -40,7 +40,7 @@ import static java.lang.Double.longBitsT
 public class AtomicDouble extends Number implements java.io.Serializable {
     private static final long serialVersionUID = -8405198993435143622L;
 
-    private volatile long value;
+    private transient volatile long value;
 
     /**
      * Creates a new {@code AtomicDouble} with the given initial value.
@@ -210,6 +210,28 @@ public class AtomicDouble extends Number
         return get();
     }
 
+    /**
+     * Saves the state to a stream (that is, serializes it).
+     *
+     * @serialData The current value is emitted (a {@code double}).
+     */
+    private void writeObject(java.io.ObjectOutputStream s)
+        throws java.io.IOException {
+        s.defaultWriteObject();
+
+        s.writeDouble(get());
+    }
+
+    /**
+     * Reconstitutes the instance from a stream (that is, deserializes it).
+     */
+    private void readObject(java.io.ObjectInputStream s)
+        throws java.io.IOException, ClassNotFoundException {
+        s.defaultReadObject();
+
+        set(s.readDouble());
+    }
+
     // Unsafe mechanics
     private static final sun.misc.Unsafe unsafe = getUnsafe();
     private static final long valueOffset;