@Override public long getDelay(TimeUnit unit) { return future.getDelay(unit); }
@Override public long getDelay(TimeUnit unit) { return future.getDelay(unit); }
/** * Returns first element only if it is expired. * Used only by drainTo. Call only when holding lock. */ private RunnableScheduledFuture<?> peekExpired() { // assert lock.isHeldByCurrentThread(); RunnableScheduledFuture<?> first = queue[0]; return (first == null || first.getDelay(NANOSECONDS) > 0) ? null : first; }
@Override public long getDelay(TimeUnit unit) { return future.getDelay(unit); }
@Override public long getDelay(TimeUnit tu) { return delegate.getDelay(tu); }
@Override public long getDelay(TimeUnit unit) { return futureTask.getDelay(unit); }
@Override public long getDelay(TimeUnit unit) { long baseDelay = wrapped.getDelay(unit); long spreadTime = (long) (baseDelay * spread); long delay = spreadTime <= 0 ? baseDelay : baseDelay + ThreadLocalRandom.current().nextLong(-spreadTime, spreadTime); // Ensure that we don't roll over for nanoseconds. return (delay < 0) ? baseDelay : delay; }
public RunnableScheduledFuture<?> poll() { final ReentrantLock lock = this.lock; lock.lock(); try { RunnableScheduledFuture<?> first = queue[0]; if (first == null || first.getDelay(NANOSECONDS) > 0) return null; else return finishPoll(first); } finally { lock.unlock(); } }
available.await(); else { long delay = first.getDelay(NANOSECONDS); if (delay <= 0) return finishPoll(first);
nanos = available.awaitNanos(nanos); } else { long delay = first.getDelay(NANOSECONDS); if (delay <= 0) return finishPoll(first);
@Override public long getDelay(TimeUnit unit) { return future.getDelay(unit); }
@Test public void test() throws InterruptedException, ExecutionException, TimeoutException { CancelableRunnable cancelableRunnable = Mockito.mock(CancelableRunnable.class); RunnableScheduledFuture futureTask = Mockito.mock(RunnableScheduledFuture.class); CancelableScheduledFuture<Object> future = new CancelableScheduledFuture<Object>(cancelableRunnable, futureTask); future.cancel(false); Mockito.verify(futureTask, Mockito.times(1)).cancel(false); future.run(); Mockito.verify(futureTask, Mockito.times(1)).run(); future.cancel(true); Mockito.verify(cancelableRunnable, Mockito.times(1)).cancel(); Mockito.verify(futureTask, Mockito.times(1)).cancel(true); future.isDone(); Mockito.verify(futureTask, Mockito.times(1)).isDone(); future.isPeriodic(); Mockito.verify(futureTask, Mockito.times(1)).isPeriodic(); future.get(); Mockito.verify(futureTask, Mockito.times(1)).get(); future.get(100L, TimeUnit.MICROSECONDS); Mockito.verify(futureTask, Mockito.times(1)).get(100L, TimeUnit.MICROSECONDS); future.getDelay(TimeUnit.HOURS); Mockito.verify(futureTask, Mockito.times(1)).getDelay(TimeUnit.HOURS); CancelableScheduledFuture<Object> future2 = new CancelableScheduledFuture<Object>(cancelableRunnable, futureTask); assertTrue(future.equals(future)); assertTrue(future.equals(future2)); assertEquals(future.hashCode(), future.hashCode()); assertEquals(future.hashCode(), future2.hashCode()); }
/** * Returns first element only if it is expired. * Used only by drainTo. Call only when holding lock. */ private RunnableScheduledFuture<?> peekExpired() { // assert lock.isHeldByCurrentThread(); RunnableScheduledFuture<?> first = queue[0]; return (first == null || first.getDelay(NANOSECONDS) > 0) ? null : first; }
/** * Returns first element only if it is expired. * Used only by drainTo. Call only when holding lock. */ private RunnableScheduledFuture<?> peekExpired() { // assert lock.isHeldByCurrentThread(); RunnableScheduledFuture<?> first = queue[0]; return (first == null || first.getDelay(NANOSECONDS) > 0) ? null : first; }
/** * Returns first element only if it is expired. * Used only by drainTo. Call only when holding lock. */ private RunnableScheduledFuture<?> peekExpired() { // assert lock.isHeldByCurrentThread(); RunnableScheduledFuture<?> first = queue[0]; return (first == null || first.getDelay(NANOSECONDS) > 0) ? null : first; }
/** * Returns first element only if it is expired. * Used only by drainTo. Call only when holding lock. */ private RunnableScheduledFuture<?> peekExpired() { // assert lock.isHeldByCurrentThread(); RunnableScheduledFuture<?> first = queue[0]; return (first == null || first.getDelay(NANOSECONDS) > 0) ? null : first; }
@Override public long getDelay(TimeUnit unit) { long baseDelay = wrapped.getDelay(unit); long spreadTime = (long) (baseDelay * spread); long delay = spreadTime <= 0 ? baseDelay : baseDelay + ThreadLocalRandom.current().nextLong(-spreadTime, spreadTime); // Ensure that we don't roll over for nanoseconds. return (delay < 0) ? baseDelay : delay; }
@Override public long getDelay(TimeUnit unit) { long baseDelay = wrapped.getDelay(unit); long spreadTime = (long) (baseDelay * spread); long delay = spreadTime <= 0 ? baseDelay : baseDelay + ThreadLocalRandom.current().nextLong(-spreadTime, spreadTime); // Ensure that we don't roll over for nanoseconds. return (delay < 0) ? baseDelay : delay; }
/** * Return and remove first element only if it is expired. * Used only by drainTo. Call only when holding lock. */ private RunnableScheduledFuture pollExpired() { RunnableScheduledFuture first = queue[0]; if (first == null || first.getDelay(TimeUnit.NANOSECONDS) > 0) return null; return finishPoll(first); }
/** * Return and remove first element only if it is expired. * Used only by drainTo. Call only when holding lock. */ private RunnableScheduledFuture pollExpired() { RunnableScheduledFuture first = queue[0]; if (first == null || first.getDelay(TimeUnit.NANOSECONDS) > 0) return null; return finishPoll(first); }