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

David Holmes david.holmes at oracle.com
Mon Aug 21 01:36:35 UTC 2017


On 20/08/2017 6:37 AM, Martin Buchholz wrote:
> Future projects:
> 
> 377 * <li>The specified amount of real time has elapsed, more or less.
> 
> Replace with
> 
> * <li>At least the specified amount of real time has elapsed.
> 
> (I think I failed to persuade David last time ...)

And you will continue to do so. :) In the presence of spurious wakeups 
it is completely untestable to say "at least the specified time has 
elapsed". It also frees the VM of the burden of having to deal with 
operating systems that have primitives that themselves return early (aka 
spuriously) or which act that way when in "broken" virtualization 
environments.

Cheers,
David

> ---
> 
> We should add a @see to TimeUnit.timedWait which at least deals with 
> excessNanos.
> 
> ---
> What percentage of the jdk's wait loops are actually correct?
> Especially if you throw in the requirement to only call System.nanoTime 
> after checking the condition the first time.
> Wait loops should probably not call currentTimeMillis.
> Writing a good timed wait loop is surprisingly tricky.
> Condition.awaitNanos helps by returning the updated time to wait.  See 
> our competing code snippet:
> http://download.java.net/java/jdk9/docs/api/java/util/concurrent/locks/Condition.html#awaitNanos-long-
> 
> Maybe the code snippet should use the plain millis form, since the 
> excess nanos are pretty much useless this decade.


More information about the core-libs-dev mailing list