下面列出了java.util.concurrent.CompletableFuture#delayedExecutor ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
public void testDelayedExecutor(Executor executor, Integer v) throws Exception {
long timeoutMillis = timeoutMillis();
// Use an "unreasonably long" long timeout to catch lingering threads
long longTimeoutMillis = 1000 * 60 * 60 * 24;
final Executor delayer, longDelayer;
if (executor == null) {
delayer = CompletableFuture.delayedExecutor(timeoutMillis, MILLISECONDS);
longDelayer = CompletableFuture.delayedExecutor(longTimeoutMillis, MILLISECONDS);
} else {
delayer = CompletableFuture.delayedExecutor(timeoutMillis, MILLISECONDS, executor);
longDelayer = CompletableFuture.delayedExecutor(longTimeoutMillis, MILLISECONDS, executor);
}
long startTime = System.nanoTime();
CompletableFuture<Integer> f =
CompletableFuture.supplyAsync(() -> v, delayer);
CompletableFuture<Integer> g =
CompletableFuture.supplyAsync(() -> v, longDelayer);
assertNull(g.getNow(null));
assertSame(v, f.get(LONG_DELAY_MS, MILLISECONDS));
long millisElapsed = millisElapsedSince(startTime);
assertTrue(millisElapsed >= timeoutMillis);
assertTrue(millisElapsed < LONG_DELAY_MS / 2);
checkCompletedNormally(f, v);
checkIncomplete(g);
assertTrue(g.cancel(true));
}
default Executor startEviction(Runnable eviction) {
var executor = CompletableFuture.delayedExecutor(getEvictEvery().toNanos(), TimeUnit.NANOSECONDS);
executor.execute(() -> {
try {
eviction.run();
} finally {
executor.execute(eviction);
}
});
return executor;
}
public void testDelayedExecutor(Executor executor, Integer v) throws Exception {
long timeoutMillis = timeoutMillis();
// Use an "unreasonably long" long timeout to catch lingering threads
long longTimeoutMillis = 1000 * 60 * 60 * 24;
final Executor delayer, longDelayer;
if (executor == null) {
delayer = CompletableFuture.delayedExecutor(timeoutMillis, MILLISECONDS);
longDelayer = CompletableFuture.delayedExecutor(longTimeoutMillis, MILLISECONDS);
} else {
delayer = CompletableFuture.delayedExecutor(timeoutMillis, MILLISECONDS, executor);
longDelayer = CompletableFuture.delayedExecutor(longTimeoutMillis, MILLISECONDS, executor);
}
long startTime = System.nanoTime();
CompletableFuture<Integer> f =
CompletableFuture.supplyAsync(() -> v, delayer);
CompletableFuture<Integer> g =
CompletableFuture.supplyAsync(() -> v, longDelayer);
assertNull(g.getNow(null));
assertSame(v, f.get(LONG_DELAY_MS, MILLISECONDS));
long millisElapsed = millisElapsedSince(startTime);
assertTrue(millisElapsed >= timeoutMillis);
assertTrue(millisElapsed < LONG_DELAY_MS / 2);
checkCompletedNormally(f, v);
checkIncomplete(g);
assertTrue(g.cancel(true));
}