Disables the current thread for thread scheduling purposes, for up to
the specified waiting time, unless the permit is available.
<p>If the permit is available then it is consumed and the call
returns immediately; otherwise the current thread becomes disabled
for thread scheduling purposes and lies dormant until one of four
things happens:
<ul>
<li>Some other thread invokes {@link #unpark unpark} with the
current thread as the target; or
<li>Some other thread {@linkplain Thread#interrupt interrupts}
the current thread; or
<li>The specified waiting time elapses; or
<li>The call spuriously (that is, for no reason) returns.
</ul>
<p>This method does <em>not</em> report which of these caused the
method to return. Callers should re-check the conditions which caused
the thread to park in the first place. Callers may also determine,
for example, the interrupt status of the thread, or the elapsed time
upon return.
@param nanos the maximum number of nanoseconds to wait
Disables the current thread for thread scheduling purposes, for up to the specified waiting time, unless the permit is available.
<p>If the permit is available then it is consumed and the call returns immediately; otherwise the current thread becomes disabled for thread scheduling purposes and lies dormant until one of four things happens:
<ul> <li>Some other thread invokes {@link #unpark unpark} with the current thread as the target; or
<li>Some other thread {@linkplain Thread#interrupt interrupts} the current thread; or
<li>The specified waiting time elapses; or
<li>The call spuriously (that is, for no reason) returns. </ul>
<p>This method does <em>not</em> report which of these caused the method to return. Callers should re-check the conditions which caused the thread to park in the first place. Callers may also determine, for example, the interrupt status of the thread, or the elapsed time upon return.
@param nanos the maximum number of nanoseconds to wait