當前位置: 首頁>>代碼示例>>Java>>正文


Java CompletableFuture.allOf方法代碼示例

本文整理匯總了Java中java.util.concurrent.CompletableFuture.allOf方法的典型用法代碼示例。如果您正苦於以下問題:Java CompletableFuture.allOf方法的具體用法?Java CompletableFuture.allOf怎麽用?Java CompletableFuture.allOf使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在java.util.concurrent.CompletableFuture的用法示例。


在下文中一共展示了CompletableFuture.allOf方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Java代碼示例。

示例1: testAllOf_exceptional

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
public void testAllOf_exceptional() throws Exception {
    for (int k = 1; k < 10; k++) {
        CompletableFuture<Integer>[] fs
            = (CompletableFuture<Integer>[]) new CompletableFuture[k];
        CFException ex = new CFException();
        for (int i = 0; i < k; i++)
            fs[i] = new CompletableFuture<>();
        CompletableFuture<Void> f = CompletableFuture.allOf(fs);
        for (int i = 0; i < k; i++) {
            checkIncomplete(f);
            checkIncomplete(CompletableFuture.allOf(fs));
            if (i != k / 2) {
                fs[i].complete(i);
                checkCompletedNormally(fs[i], i);
            } else {
                fs[i].completeExceptionally(ex);
                checkCompletedExceptionally(fs[i], ex);
            }
        }
        checkCompletedWithWrappedException(f, ex);
        checkCompletedWithWrappedException(CompletableFuture.allOf(fs), ex);
    }
}
 
開發者ID:AdoptOpenJDK,項目名稱:openjdk-jdk10,代碼行數:24,代碼來源:CompletableFutureTest.java

示例2: onProducerRemoved

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
private void onProducerRemoved(final ProducerRemoved message) {
    LOG.debug("Received ProducerRemoved: {}", message);

    final List<CompletableFuture<Object>> futures = new ArrayList<>();

    for (final String address : resolver.getShardingServicePeerActorAddresses()) {
        final ActorSelection selection = actorSystem.actorSelection(address);

        futures.add(FutureConverters.toJava(
                actorContext.executeOperationAsync(selection, new NotifyProducerRemoved(message.getSubtrees())))
                .toCompletableFuture());
    }

    final CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(
            futures.toArray(new CompletableFuture[futures.size()]));

    final ActorRef respondTo = getSender();

    combinedFuture
            .thenRun(() -> respondTo.tell(new Status.Success(null), self()))
            .exceptionally(e -> {
                respondTo.tell(new Status.Failure(null), self());
                return null;
            });

}
 
開發者ID:hashsdn,項目名稱:hashsdn-controller,代碼行數:27,代碼來源:ShardedDataTreeActor.java

示例3: failValidation

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
/**
 * Audit a failed submission validation.
 *
 * @param conversionReport report of the conversion
 * @return future
 */
@Override
public CompletableFuture<Void> failValidation(Converter.ConversionReport conversionReport) {
	if (noAudit()) {
		return null;
	}

	API_LOG.info("Writing audit information for a validation failure scenario");

	Source qrdaSource = conversionReport.getQrdaSource();
	Source qppSource = conversionReport.getQppSource();
	Source validationErrorSource = conversionReport.getValidationErrorsSource();
	Source rawValidationErrorSource = conversionReport.getRawValidationErrorsOrEmptySource();

	Metadata metadata = initMetadata(conversionReport, Outcome.VALIDATION_ERROR);
	CompletableFuture<Void> allWrites = CompletableFuture.allOf(
			storeContent(rawValidationErrorSource).thenAccept(metadata::setRawValidationErrorLocator),
			storeContent(validationErrorSource).thenAccept(metadata::setValidationErrorLocator),
			storeContent(qppSource).thenAccept(metadata::setQppLocator),
			storeContent(qrdaSource).thenAccept(metadata::setSubmissionLocator));
	return allWrites.whenComplete((nada, thrown) -> persist(metadata, thrown));
}
 
開發者ID:CMSgov,項目名稱:qpp-conversion-tool,代碼行數:28,代碼來源:AuditServiceImpl.java

示例4: refreshAnnotationsView

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
/**
 * Refreshes the view for Annotations that already exist but are modified.
 * @param observationUuid
 */
public void refreshAnnotationsView(Set<UUID> observationUuid) {
    CopyOnWriteArrayList<Annotation> annotations = new CopyOnWriteArrayList<>();
    final AnnotationService annotationService = toolBox.getServices().getAnnotationService();
    CompletableFuture[] futures = observationUuid.stream()
            .map(uuid -> annotationService.findByUuid(uuid)
                    .thenAccept(annotations::add))
            .toArray(i -> new CompletableFuture[i]);
    CompletableFuture<Void> all = CompletableFuture.allOf(futures);
    final EventBus eventBus = toolBox.getEventBus();
    all.thenAccept(v -> {
        eventBus.send(new AnnotationsChangedEvent(annotations));
    });
}
 
開發者ID:mbari-media-management,項目名稱:vars-annotation,代碼行數:18,代碼來源:AnnotationServiceDecorator.java

示例5: closeNodes

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
private static CompletableFuture<Void> closeNodes(Stream<BoundNode> nodes, CloseType closeType) {
  return CompletableFuture.allOf(
      nodes
          .map(n -> n.closeConnectionsAsync(closeType).toCompletableFuture())
          .collect(Collectors.toList())
          .toArray(new CompletableFuture[] {}));
}
 
開發者ID:datastax,項目名稱:simulacron,代碼行數:8,代碼來源:BoundNode.java

示例6: closeChannelGroup

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
private static CompletableFuture<Void> closeChannelGroup(
    ChannelGroup channelGroup, CloseType closeType) {
  switch (closeType) {
    case DISCONNECT:
      return completable(channelGroup.disconnect());
    default:
      return CompletableFuture.allOf(
          channelGroup
              .stream()
              .map(
                  c -> {
                    CompletableFuture<Void> f;
                    Function<SocketChannel, ChannelFuture> shutdownMethod =
                        closeType == CloseType.SHUTDOWN_READ
                            ? SocketChannel::shutdownInput
                            : SocketChannel::shutdownOutput;
                    if (c instanceof SocketChannel) {
                      f = completable(shutdownMethod.apply((SocketChannel) c));
                    } else {
                      logger.warn(
                          "Got {} request for non-SocketChannel {}, disconnecting instead.",
                          closeType,
                          c);
                      f = completable(c.disconnect());
                    }
                    return f;
                  })
              .collect(Collectors.toList())
              .toArray(new CompletableFuture[] {}));
  }
}
 
開發者ID:datastax,項目名稱:simulacron,代碼行數:32,代碼來源:BoundNode.java

示例7: sequence

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
private <T> CompletionStage<List<T>> sequence(final List<CompletionStage<T>> stages) {
    //noinspection SuspiciousToArrayCall
    final CompletableFuture<Void> done = CompletableFuture.allOf(stages.toArray(new CompletableFuture[stages.size()]));
    
    return done.thenApply(v -> stages.stream()
        .map(CompletionStage::toCompletableFuture)
        .map(CompletableFuture::join)
        .collect(Collectors.<T>toList())
    );
}
 
開發者ID:hantsy,項目名稱:javaee8-jaxrs-sample,代碼行數:11,代碼來源:AggregateResource.java

示例8: syncProducts

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
@Nonnull
private CompletionStage<Void> syncProducts(@Nonnull final Map<ProductDraft, Product> productsToSync) {
    final List<CompletableFuture<Optional<Product>>> futureUpdates =
        productsToSync.entrySet().stream()
                      .map(entry -> fetchProductAttributesMetadataAndUpdate(entry.getValue(), entry.getKey()))
                      .map(CompletionStage::toCompletableFuture)
                      .collect(Collectors.toList());
    return CompletableFuture.allOf(futureUpdates.toArray(new CompletableFuture[futureUpdates.size()]));
}
 
開發者ID:commercetools,項目名稱:commercetools-sync-java,代碼行數:10,代碼來源:ProductSync.java

示例9: getProductSet

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
@Override
public CompletableFuture<ProductSet> getProductSet() {
    CompletableFuture<ProductSet> getFuture = new CompletableFuture<>();
    CompletableFuture<Void> allCompleted = CompletableFuture
        .allOf(loaders.toArray(new CompletableFuture[loaders.size()]));
    allCompleted.thenRun(() -> {
        loaders.forEach(loader -> loader.join().forEach(loaded -> products.addProductLinkage(loaded)));
        getFuture.complete(products);
    }).exceptionally(t -> {
        LOG.error("unexpected error loading products", t);
        return null;
    });
    return getFuture;
}
 
開發者ID:cloudwall,項目名稱:libcwfincore,代碼行數:15,代碼來源:LoadableProductMaster.java

示例10: testValueFactoryRequiresMainThreadHeldByOtherSync

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
/**
 * Verifies that no deadlock occurs if the value factory synchronously blocks while switching to the UI thread.
 */
private void testValueFactoryRequiresMainThreadHeldByOtherSync(boolean passJtfToLazyCtor) throws Exception {
	SynchronizationContext ctxt = SingleThreadedSynchronizationContext.create();
	SynchronizationContext.setSynchronizationContext(ctxt);
	JoinableFutureContext context = new JoinableFutureContext();
	JoinableFutureFactory asyncPump = context.getFactory();
	Thread originalThread = Thread.currentThread();

	AsyncManualResetEvent evt = new AsyncManualResetEvent();
	AsyncLazy<Object> lazy = new AsyncLazy<>(
		() -> {
			// It is important that no await appear before this JFF.run call, since
			// we're testing that the value factory is not invoked while the AsyncLazy
			// holds a private lock that would deadlock when called from another thread.
			asyncPump.run(() -> Async.awaitAsync(asyncPump.switchToMainThreadAsync(getTimeoutToken())));
			return Async.awaitAsync(
				Async.yieldAsync(),
				() -> CompletableFuture.completedFuture(new Object()));
		},
		// mix it up to exercise all the code paths in the ctor.
		passJtfToLazyCtor ? asyncPump : null);

	CompletableFuture<?> backgroundRequest = Futures.supplyAsync(() -> Async.awaitAsync(lazy.getValueAsync()));

	// Give the background thread time to call GetValueAsync(), but it doesn't yield (when the test was written).
	Thread.sleep(ASYNC_DELAY.toMillis());
	CompletableFuture<?> foregroundRequest = lazy.getValueAsync();

	Frame frame = SingleThreadedSynchronizationContext.newFrame();
	CompletableFuture<?> combinedTask = CompletableFuture.allOf(foregroundRequest, backgroundRequest);
	TplExtensions.withTimeout(combinedTask, UNEXPECTED_TIMEOUT).thenRun(() -> frame.setContinue(false));
	SingleThreadedSynchronizationContext.pushFrame(ctxt, frame);

	// Ensure that the test didn't simply timeout, and that the individual tasks did not throw.
	Assert.assertTrue(foregroundRequest.isDone());
	Assert.assertTrue(backgroundRequest.isDone());
	Assert.assertSame(foregroundRequest.join(), backgroundRequest.join());
}
 
開發者ID:tunnelvisionlabs,項目名稱:java-threading,代碼行數:41,代碼來源:AsyncLazyTest.java

示例11: onProducerCreated

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
private void onProducerCreated(final ProducerCreated message) {
    LOG.debug("Received ProducerCreated: {}", message);

    // fastpath if we have no peers
    if (resolver.getShardingServicePeerActorAddresses().isEmpty()) {
        getSender().tell(new Status.Success(null), noSender());
    }

    final ActorRef sender = getSender();
    final Collection<DOMDataTreeIdentifier> subtrees = message.getSubtrees();

    final List<CompletableFuture<Object>> futures = new ArrayList<>();

    for (final String address : resolver.getShardingServicePeerActorAddresses()) {
        final ActorSelection actorSelection = actorSystem.actorSelection(address);
        futures.add(
                FutureConverters.toJava(
                        actorContext.executeOperationAsync(
                                actorSelection, new NotifyProducerCreated(subtrees), DEFAULT_ASK_TIMEOUT))
                .toCompletableFuture());
    }

    final CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(
            futures.toArray(new CompletableFuture[futures.size()]));

    combinedFuture
            .thenRun(() -> sender.tell(new Success(null), noSender()))
            .exceptionally(throwable -> {
                sender.tell(new Status.Failure(throwable), self());
                return null;
            });
}
 
開發者ID:hashsdn,項目名稱:hashsdn-controller,代碼行數:33,代碼來源:ShardedDataTreeActor.java

示例12: balanceRoles

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
@Override
public void balanceRoles() {
    List<ControllerNode> nodes = newArrayList(clusterService.getNodes());
    Map<ControllerNode, Set<DeviceId>> controllerDevices = new HashMap<>();
    int deviceCount = 0;

    // Create buckets reflecting current ownership.
    for (ControllerNode node : nodes) {
        if (clusterService.getState(node.id()).isActive()) {
            Set<DeviceId> devicesOf = new HashSet<>(getDevicesOf(node.id()));
            deviceCount += devicesOf.size();
            controllerDevices.put(node, devicesOf);
            log.info("Node {} has {} devices.", node.id(), devicesOf.size());
        }
    }

    if (useRegionForBalanceRoles && balanceRolesUsingRegions(controllerDevices)) {
        return;
    }

    // Now re-balance the buckets until they are roughly even.
    List<CompletableFuture<Void>> balanceBucketsFutures = balanceControllerNodes(controllerDevices, deviceCount);

    CompletableFuture<Void> balanceRolesFuture = CompletableFuture.allOf(
            balanceBucketsFutures.toArray(new CompletableFuture[balanceBucketsFutures.size()]));

    Futures.getUnchecked(balanceRolesFuture);
}
 
開發者ID:shlee89,項目名稱:athena,代碼行數:29,代碼來源:MastershipManager.java

示例13: balanceBuckets

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
/**
 * Balance the node buckets by moving devices from largest to smallest node.
 *
 * @param smallest node that is master of the smallest number of devices
 * @param largest node that is master of the largest number of devices
 * @param controllerDevices controller nodes to devices map
 * @param deviceCount number of devices mastered by controller nodes
 * @return list of setRole futures for "moved" devices
 */
private CompletableFuture<Void> balanceBuckets(ControllerNode smallest, ControllerNode largest,
                            Map<ControllerNode, Set<DeviceId>>  controllerDevices,
                            int deviceCount) {
    Collection<DeviceId> minBucket = controllerDevices.get(smallest);
    Collection<DeviceId> maxBucket = controllerDevices.get(largest);
    int bucketCount = controllerDevices.keySet().size();

    int delta = (maxBucket.size() - minBucket.size()) / 2;
    delta = Math.min(deviceCount / bucketCount, delta);

    List<CompletableFuture<Void>> setRoleFutures = Lists.newLinkedList();

    if (delta > 0) {
        log.info("Attempting to move {} nodes from {} to {}...", delta,
                 largest.id(), smallest.id());

        int i = 0;
        Iterator<DeviceId> it = maxBucket.iterator();
        while (it.hasNext() && i < delta) {
            DeviceId deviceId = it.next();
            log.info("Setting {} as the master for {}", smallest.id(), deviceId);
            setRoleFutures.add(setRole(smallest.id(), deviceId, MASTER));
            controllerDevices.get(smallest).add(deviceId);
            it.remove();
            i++;
        }
    }

    return CompletableFuture.allOf(setRoleFutures.toArray(new CompletableFuture[setRoleFutures.size()]));
}
 
開發者ID:shlee89,項目名稱:athena,代碼行數:40,代碼來源:MastershipManager.java

示例14: evict

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
@Override
public CompletableFuture<Void> evict(NodeId nodeId) {
    return CompletableFuture.allOf(getLeaderElectors().stream()
                                                      .map(le -> le.evict(nodeId))
                                                      .toArray(CompletableFuture[]::new));
}
 
開發者ID:shlee89,項目名稱:athena,代碼行數:7,代碼來源:PartitionedAsyncLeaderElector.java

示例15: addListener

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
@Override
public CompletableFuture<Void> addListener(MapEventListener<K, V> listener, Executor executor) {
    return CompletableFuture.allOf(getMaps().stream()
                                            .map(map -> map.addListener(listener, executor))
                                            .toArray(CompletableFuture[]::new));
}
 
開發者ID:shlee89,項目名稱:athena,代碼行數:7,代碼來源:PartitionedAsyncConsistentMap.java


注:本文中的java.util.concurrent.CompletableFuture.allOf方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。