RFR(s) #2: 6344935: (spec) clarify specifications for Object.wait overloads

David Holmes david.holmes at oracle.com
Fri Aug 25 02:49:48 UTC 2017


I have no further comments on the actual spec.

Here's my suggestion for the timed-wait example :)

while (true) {
   if (!condition)
     wait(timeout, nanos);
   else
     break; // condition holds
   <recompute timeout>
   if (timeout <= 0 && !condition)
     throw new TimedOutException();
}
// Perform action appropriate to condition

Cheers,
David

On 25/08/2017 11:50 AM, Stuart Marks wrote:
> 
> 
> On 8/20/17 6:32 PM, David Holmes wrote:
>> You're a brave man :)
> 
> "It's a dirty job, but somebody's gotta do it." :-)
> 
> I have a personal interest in this, as back in the 1.3 days I was trying 
> to nail down some multi-threaded code, and I found the wait() docs to be 
> quite lacking. In particular, they didn't cover what happened if a 
> thread had been interrupted *before* wait was called; they didn't cover 
> spurious wakeup; and there was no recommendation to call wait() from 
> within a loop. This last was particularly frustrating because it was 
> something that "everybody knew" should be done but it wasn't actually 
> documented. I'm pleased that these issues have been addressed, though 
> some cleaning up remains -- hence this changeset.
> 
> I've made a few more changes and non-changes in response to comments.
> 
> 1) Added comma in @param timeout in two locations, per Martin.
> 
> 2) I didn't remove @see links where similar links occurred in the text. 
> I think it's important that all the wait methods have @see links to both 
> notify and notifyAll and to the other two methods in the wait family.
> 
> 3) I left the bullet point "The specified amount of real time has 
> elapsed, more or less" unchanged, as it seems Martin is still unable to 
> convince David even after all these years.
> 
> 4) Restored the sentence about clearing the thread's interrupted status, 
> in three locations of @throws InterruptedException, per David.
> 
> 5) I see there was a long discussion about the code snippet. I had to 
> take some liberties with the logic here, as adding timeout recomputation 
> pseudo-code as suggested by Hans Boehm clearly begged the question of 
> what to do with the loop condition if the timeout has elapsed. I rather 
> sidestepped this by adding a "<timeout not exceeded>" clause in the 
> while-condition. I think this satisfies Hans' original comment, and it's 
> not incorrect, but it does leave several of questions unanswered about 
> how timed-wait logic should be implemented, and how to distinguish 
> between a timeout and a notification. Martin suggested that I just 
> proceed with this, and that the examples can be revisited when/if the 
> TimeUnit.timedWait example is updated. I'm fine with that. I hope 
> everybody else is too.
> 
> Revised webrev:
> 
>      http://cr.openjdk.java.net/~smarks/reviews/6344935/webrev.2/
> 
> Javadoc output:
> 
>      
> http://cr.openjdk.java.net/~smarks/reviews/6344935/java/lang/Object.html#wait-- 
> 
> 
> (Note, this is just a single, unstyled HTML file, so the formatting is 
> somewhat odd. The text of the wait methods should be fairly readable, 
> though.)
> 
> s'marks
> 
> 
> 


More information about the core-libs-dev mailing list