In general, I'm in favor of ensuring that wording in various bits of the specification is well aligned. I don't see specifically what would need to be improved in this case, though.

Can we align the wording with existing wording in either LockSupport or
Condition?

The various LockSupport.park methods have a similar bullet list, and among them is the following:

    * The call spuriously (that is, for no reason) returns.

But note this says that the park call returns, whereas the wait call does NOT necessarily return because of spurious wakeup; it's merely removed from the wait set. Thus the proposed text says

    * Thread <var>T</var> is awakened spuriously. (See below.)

and subsequent paragraphs talk about removal from wait set, competing to re-acquire the lock, and spurious wakeup.


There's also an existing paragraph in Condition that goes "When waiting upon
a Condition, a spurious ... "

This paragraph from the Condition specification says,

When waiting upon a Condition, a "spurious wakeup" is permitted to occur, in
general, as a concession to the underlying platform semantics. This has
little practical impact on most application programs as a Condition should
always be waited upon in a loop, testing the state predicate that is being
waited for. An implementation is free to remove the possibility of spurious
wakeups but it is recommended that applications programmers always assume
that they can occur and so always wait in a loop.

whereas the one in Object.wait(long) says:

A thread can also wake up without being notified, interrupted, or timing out,
a so-called spurious wakeup. While this will rarely occur in practice,
applications must guard against it by testing for the condition that should
have caused the thread to be awakened, and continuing to wait if the
condition is not satisfied. In other words, waits should always occur in
loops, like this one:

     synchronized (obj) {
         while (<condition does not hold>)
             obj.wait(timeout);
         ... // Perform action appropriate to condition
     }

These mostly say the same thing, though the Condition spec talks about the underlying implementation, whereas the Object.wait spec is strongly oriented toward the application programmer. I think this is ok.

If there's some bit of wording that needs to be corrected somewhere, please suggest it.

s'marks

Reply via email to