Refine search
protected void delay() { if (todelay > 0) { long delayNs; if (randomizedelay) { delayNs = TimeUnit.MILLISECONDS.toNanos(ThreadLocalRandom.current().nextInt(todelay)); if (delayNs == 0) { return; } } else { delayNs = TimeUnit.MILLISECONDS.toNanos(todelay); } final long deadline = System.nanoTime() + delayNs; do { LockSupport.parkNanos(deadline - System.nanoTime()); } while (System.nanoTime() < deadline && !Thread.interrupted()); } }
final long baseDelayNs = MICROSECONDS.toNanos(delays[mod]); final int delayRangeNs = (int) (MICROSECONDS.toNanos(delays[mod + 1]) - baseDelayNs); final long delayNs = baseDelayNs + random.nextInt(delayRangeNs); final long deadline = System.nanoTime() + delayNs; do { LockSupport.parkNanos(deadline - System.nanoTime()); } while (System.nanoTime() < deadline && !Thread.interrupted()); } finally {
public static <EXCEPTION extends Exception> boolean tryAwaitEx( ThrowingSupplier<Boolean,EXCEPTION> condition, long timeout, TimeUnit timeoutUnit, long pollInterval, TimeUnit pollUnit, Clock clock ) throws EXCEPTION { long deadlineMillis = clock.millis() + timeoutUnit.toMillis( timeout ); long pollIntervalNanos = pollUnit.toNanos( pollInterval ); do { if ( condition.get() ) { return true; } LockSupport.parkNanos( pollIntervalNanos ); } while ( clock.millis() < deadlineMillis ); return false; }
final long timeoutNanos = unit.toNanos(timeout); // we rely on the implicit null check on unit. long remainingNanos = timeoutNanos; if (Thread.interrupted()) { if (ATOMIC_HELPER.casWaiters(this, oldHead, node)) { while (true) { LockSupport.parkNanos(this, remainingNanos); long overWaitNanos = -remainingNanos; long overWaitUnits = unit.convert(overWaitNanos, TimeUnit.NANOSECONDS); long overWaitLeftoverNanos = overWaitNanos - unit.toNanos(overWaitUnits); boolean shouldShowExtraNanos = overWaitUnits == 0 || overWaitLeftoverNanos > SPIN_THRESHOLD_NANOS;