code: public boolean weakCompareAndSet(V       expectedReference,
                                       V       newReference,
                                       boolean expectedMark,
                                       boolean newMark) {
          return compareAndSet(expectedReference, newReference,
                               expectedMark, newMark);
      }
docs: Atomically sets the value of both the reference and mark
  to the given update values if the
  current reference is {@code ==} to the expected reference
  and the current mark is equal to the expected mark.
  
  <p><a href="package-summary.html#weakCompareAndSet">May fail
  spuriously and does not provide ordering guarantees</a>, so is
  only rarely an appropriate alternative to {@code compareAndSet}.
  
  @param expectedReference the expected value of the reference
  @param newReference the new value for the reference
  @param expectedMark the expected value of the mark
  @param newMark the new value for the mark
  @return {@code true} if successful