java.util.concurrent.CompletableFuture#completeAsync ( )源码实例Demo

下面列出了java.util.concurrent.CompletableFuture#completeAsync ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: openjdk-jdk9   文件: Stream.java
@Override
void completeResponse(Response r) {
    HttpResponseImpl.logResponse(r);
    pushCF.complete(r); // not strictly required for push API
    // start reading the body using the obtained BodyProcessor
    CompletableFuture<Void> start = new MinimalFuture<>();
    start.thenCompose( v -> readBodyAsync(getPushHandler(), false, getExchange().executor()))
        .whenComplete((T body, Throwable t) -> {
            if (t != null) {
                responseCF.completeExceptionally(t);
            } else {
                HttpResponseImpl<T> response = new HttpResponseImpl<>(r.request, r, body, getExchange());
                responseCF.complete(response);
            }
        });
    start.completeAsync(() -> null, getExchange().executor());
}
 
源代码2 项目: openjdk-jdk9   文件: MultiExchange.java
CompletableFuture<U> multiResponseAsync() {
    CompletableFuture<Void> start = new MinimalFuture<>();
    CompletableFuture<HttpResponseImpl<T>> cf = responseAsync0(start);
    CompletableFuture<HttpResponse<T>> mainResponse =
            cf.thenApply((HttpResponseImpl<T> b) -> {
                  multiResponseHandler.onResponse(b);
                  return (HttpResponse<T>)b;
               });

    pushGroup.setMainResponse(mainResponse);
    // set up house-keeping related to multi-response
    mainResponse.thenAccept((r) -> {
        // All push promises received by now.
        pushGroup.noMorePushes(true);
    });
    CompletableFuture<U> res = multiResponseHandler.completion(pushGroup.groupResult(), pushGroup.pushesCF());
    start.completeAsync( () -> null, executor); // trigger execution
    return res;
}
 
源代码3 项目: enmasse   文件: ExternalMessagingClient.java
public Future<Void> getLinkAttachedProbe() {
    Objects.requireNonNull(this.client);
    if (client.getLinkAttached() != null) {
        return client.getLinkAttached();
    } else {
        CompletableFuture<Void> defaultWait = new CompletableFuture<Void>();
        defaultWait.completeAsync(() -> {
            try {
                Thread.sleep(14000);
            } catch (Exception e) {
                LOGGER.error("Error in default wait for link attached", e);
            }
            return null;
        }, r -> new Thread(r).start());
        return defaultWait;
    }
}
 
源代码4 项目: openjdk-jdk9   文件: MinimalFuture.java
public static <U> CompletableFuture<U> supply(ExceptionalSupplier<U> supplier, Executor executor) {
    CompletableFuture<U> cf = new MinimalFuture<>();
    cf.completeAsync( () -> {
        try {
            return supplier.get();
        } catch (Throwable ex) {
            throw new CompletionException(ex);
        }
    }, executor);
    return cf;
}
 
源代码5 项目: openjdk-jdk9   文件: CompletableFutureTest.java
/**
 * completeAsync completes with value of given supplier
 */
public void testCompleteAsync() {
    for (Integer v1 : new Integer[] { 1, null })
{
    CompletableFuture<Integer> f = new CompletableFuture<>();
    f.completeAsync(() -> v1);
    f.join();
    checkCompletedNormally(f, v1);
}}
 
源代码6 项目: openjdk-jdk9   文件: CompletableFutureTest.java
/**
 * completeAsync completes exceptionally if given supplier throws
 */
public void testCompleteAsync2() {
    CompletableFuture<Integer> f = new CompletableFuture<>();
    CFException ex = new CFException();
    f.completeAsync(() -> { throw ex; });
    try {
        f.join();
        shouldThrow();
    } catch (CompletionException success) {}
    checkCompletedWithWrappedException(f, ex);
}
 
源代码7 项目: openjdk-jdk9   文件: CompletableFutureTest.java
/**
 * completeAsync with given executor completes with value of given supplier
 */
public void testCompleteAsync3() {
    for (Integer v1 : new Integer[] { 1, null })
{
    CompletableFuture<Integer> f = new CompletableFuture<>();
    ThreadExecutor executor = new ThreadExecutor();
    f.completeAsync(() -> v1, executor);
    assertSame(v1, f.join());
    checkCompletedNormally(f, v1);
    assertEquals(1, executor.count.get());
}}
 
源代码8 项目: openjdk-jdk9   文件: CompletableFutureTest.java
/**
 * completeAsync with given executor completes exceptionally if
 * given supplier throws
 */
public void testCompleteAsync4() {
    CompletableFuture<Integer> f = new CompletableFuture<>();
    CFException ex = new CFException();
    ThreadExecutor executor = new ThreadExecutor();
    f.completeAsync(() -> { throw ex; }, executor);
    try {
        f.join();
        shouldThrow();
    } catch (CompletionException success) {}
    checkCompletedWithWrappedException(f, ex);
    assertEquals(1, executor.count.get());
}
 
@Test
void makeContextAwareCompletableFutureUsingCompleteAsync() throws Exception {
    final RequestContext context =
            ServiceRequestContext.builder(HttpRequest.of(HttpMethod.GET, "/")).build();
    final CompletableFuture<String> originalFuture = new CompletableFuture<>();
    final CompletableFuture<String> contextAwareFuture = context.makeContextAware(originalFuture);
    final CompletableFuture<String> resultFuture = contextAwareFuture.completeAsync(() -> "success");

    originalFuture.complete("success");
    assertThat(resultFuture.get()).isEqualTo("success");
}
 
@Test
void makeContextAwareCompletableFutureUsingCompleteAsyncWithExecutor() throws Exception {
    final ExecutorService executor = Executors.newFixedThreadPool(2);
    final RequestContext context =
            ServiceRequestContext.builder(HttpRequest.of(HttpMethod.GET, "/")).build();
    final CompletableFuture<String> originalFuture = new CompletableFuture<>();
    final CompletableFuture<String> contextAwareFuture = context.makeContextAware(originalFuture);
    final CompletableFuture<String> resultFuture = contextAwareFuture.completeAsync(() -> "success",
                                                                                    executor);

    originalFuture.complete("success");
    assertThat(resultFuture.get()).isEqualTo("success");
}
 
源代码11 项目: j2objc   文件: CompletableFutureTest.java
/**
 * completeAsync completes with value of given supplier
 */
public void testCompleteAsync() {
    for (Integer v1 : new Integer[] { 1, null })
{
    CompletableFuture<Integer> f = new CompletableFuture<>();
    f.completeAsync(() -> v1);
    f.join();
    checkCompletedNormally(f, v1);
}}
 
源代码12 项目: j2objc   文件: CompletableFutureTest.java
/**
 * completeAsync completes exceptionally if given supplier throws
 */
public void testCompleteAsync2() {
    CompletableFuture<Integer> f = new CompletableFuture<>();
    CFException ex = new CFException();
    f.completeAsync(() -> {if (true) throw ex; return 1;});
    try {
        f.join();
        shouldThrow();
    } catch (CompletionException success) {}
    checkCompletedWithWrappedException(f, ex);
}
 
源代码13 项目: j2objc   文件: CompletableFutureTest.java
/**
 * completeAsync with given executor completes with value of given supplier
 */
public void testCompleteAsync3() {
    for (Integer v1 : new Integer[] { 1, null })
{
    CompletableFuture<Integer> f = new CompletableFuture<>();
    ThreadExecutor executor = new ThreadExecutor();
    f.completeAsync(() -> v1, executor);
    assertSame(v1, f.join());
    checkCompletedNormally(f, v1);
    assertEquals(1, executor.count.get());
}}
 
源代码14 项目: j2objc   文件: CompletableFutureTest.java
/**
 * completeAsync with given executor completes exceptionally if
 * given supplier throws
 */
public void testCompleteAsync4() {
    CompletableFuture<Integer> f = new CompletableFuture<>();
    CFException ex = new CFException();
    ThreadExecutor executor = new ThreadExecutor();
    f.completeAsync(() -> {if (true) throw ex; return 1;}, executor);
    try {
        f.join();
        shouldThrow();
    } catch (CompletionException success) {}
    checkCompletedWithWrappedException(f, ex);
    assertEquals(1, executor.count.get());
}
 
源代码15 项目: postgres-async-driver   文件: PgConnectionPool.java
private void closeNextStatement(Iterator<PooledPgPreparedStatement> statementsSource, CompletableFuture<Void> onComplete) {
    if (statementsSource.hasNext()) {
        statementsSource.next().delegate.close()
                .thenAccept(v -> {
                    statementsSource.remove();
                    closeNextStatement(statementsSource, onComplete);
                })
                .exceptionally(th -> {
                    futuresExecutor.execute(() -> onComplete.completeExceptionally(th));
                    return null;
                });
    } else {
        onComplete.completeAsync(() -> null, futuresExecutor);
    }
}
 
源代码16 项目: tutorials   文件: CompletableFutureUnitTest.java
@Test
public void testDelay () throws Exception {
    Object input = new Object();
    CompletableFuture<Object> future = new CompletableFuture<>();
    future.completeAsync(() -> input, CompletableFuture.delayedExecutor(1, TimeUnit.SECONDS));
    
    Thread.sleep(100);
    
    assertFalse(future.isDone());
    
    Thread.sleep(1000);
    assertTrue(future.isDone());
    assertSame(input, future.get());
}
 
源代码17 项目: openjdk-jdk9   文件: MultiExchange.java
public CompletableFuture<HttpResponseImpl<T>> responseAsync() {
    CompletableFuture<Void> start = new MinimalFuture<>();
    CompletableFuture<HttpResponseImpl<T>> cf = responseAsync0(start);
    start.completeAsync( () -> null, executor); // trigger execution
    return cf;
}
 
源代码18 项目: postgres-async-driver   文件: PgConnectionPool.java
@Override
public CompletableFuture<Connection> getConnection() {
    CompletableFuture<Connection> uponAvailable = new CompletableFuture<>();

    lock.lock();
    try {
        if (closed) {
            futuresExecutor.execute(() -> uponAvailable.completeExceptionally(new SqlException("Connection pool is closed")));
        } else {
            Connection connection = connections.poll();
            if (connection != null) {
                uponAvailable.completeAsync(() -> connection, futuresExecutor);
            } else {
                if (tryIncreaseSize()) {
                    new PooledPgConnection(new PgConnection(toStream.apply(futuresExecutor), dataConverter, encoding))
                            .connect(username, password, database)
                            .thenApply(pooledConnection -> {
                                if (validationQuery != null && !validationQuery.isBlank()) {
                                    return pooledConnection.completeScript(validationQuery)
                                            .handle((rss, th) -> {
                                                if (th != null) {
                                                    return ((PooledPgConnection) pooledConnection).delegate.close()
                                                            .thenApply(v -> CompletableFuture.<Connection>failedFuture(th))
                                                            .thenCompose(Function.identity());
                                                } else {
                                                    return CompletableFuture.completedFuture(pooledConnection);
                                                }
                                            })
                                            .thenCompose(Function.identity());
                                } else {
                                    return CompletableFuture.completedFuture(pooledConnection);
                                }
                            })
                            .thenCompose(Function.identity())
                            .thenAccept(pooledConnection -> uponAvailable.completeAsync(() -> pooledConnection, futuresExecutor))
                            .exceptionally(th -> {
                                lock.lock();
                                try {
                                    size--;
                                    futuresExecutor.execute(() -> uponAvailable.completeExceptionally(th));
                                    return null;
                                } finally {
                                    lock.unlock();
                                }
                            });
                } else {
                    // Pool is full now and all connections are busy
                    subscribers.offer(uponAvailable);
                }
            }
        }
    } finally {
        lock.unlock();
    }

    return uponAvailable;
}