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