下面列出了java.util.concurrent.CompletableFuture#orTimeout ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Benchmark
@BenchmarkMode({ Mode.Throughput })
@OutputTimeUnit(TimeUnit.MILLISECONDS)
public Object completableFutureWithTimeout() {
CompletableFuture<Integer> future = new CompletableFuture<>();
future.orTimeout(1, TimeUnit.SECONDS);
future.complete(Integer.valueOf(1));
return future.join();
}
/**
* orTimeout completes with TimeoutException if not complete
*/
public void testOrTimeout_timesOut() {
long timeoutMillis = timeoutMillis();
CompletableFuture<Integer> f = new CompletableFuture<>();
long startTime = System.nanoTime();
f.orTimeout(timeoutMillis, MILLISECONDS);
checkCompletedWithTimeoutException(f);
assertTrue(millisElapsedSince(startTime) >= timeoutMillis);
}
/**
* orTimeout completes normally if completed before timeout
*/
public void testOrTimeout_completed() {
for (Integer v1 : new Integer[] { 1, null })
{
CompletableFuture<Integer> f = new CompletableFuture<>();
CompletableFuture<Integer> g = new CompletableFuture<>();
long startTime = System.nanoTime();
f.complete(v1);
f.orTimeout(LONG_DELAY_MS, MILLISECONDS);
g.orTimeout(LONG_DELAY_MS, MILLISECONDS);
g.complete(v1);
checkCompletedNormally(f, v1);
checkCompletedNormally(g, v1);
assertTrue(millisElapsedSince(startTime) < LONG_DELAY_MS / 2);
}}
@Test
public void testTimeoutTriggered () throws Exception {
CompletableFuture<Object> future = new CompletableFuture<>();
future.orTimeout(1, TimeUnit.SECONDS);
Thread.sleep(1100);
assertTrue(future.isDone());
try {
future.get();
} catch (ExecutionException e) {
assertTrue(e.getCause() instanceof TimeoutException);
}
}
@Test
public void testTimeoutNotTriggered () throws Exception {
Object input = new Object();
CompletableFuture<Object> future = new CompletableFuture<>();
future.orTimeout(1, TimeUnit.SECONDS);
Thread.sleep(100);
future.complete(input);
Thread.sleep(1000);
assertTrue(future.isDone());
assertSame(input, future.get());
}