Java 8 - l'Appel de méthodes asynchrones en parallèle et de combiner leurs résultats

Je suis nouveau sur le Java 8 simultanéité des fonctionnalités telles que CompletableFuture et j'espère que vous pouvez aider à obtenir commencé avec la suite de cas d'utilisation.

Il ya un service appelé TimeConsumingServices qui fournit beaucoup de temps à des opérations qui j'aimerais exécuter en parallèle puisque tous sont indépendants.

interface TimeConsumingService {

  default String hello(String name) {
    System.out.println(System.currentTimeMillis() + " > hello " + name);
    return "Hello " + name;
  }
  default String planet(String name) {
    System.out.println(System.currentTimeMillis() + " > planet " + name);
    return "Planet: " + name;
  }
  default String echo(String name) {
    System.out.println(System.currentTimeMillis() + " > echo " + name);
    return name;
  }

  default byte[] convert(String hello, String planet, String echo) {
    StringBuilder sb = new StringBuilder();
    sb.append(hello);
    sb.append(planet);
    sb.append(echo);
    return sb.toString().getBytes();
  }
}

Jusqu'à présent j'ai mis en place l'exemple suivant et j'ai réussi à appeler les trois méthodes en parallèle.

public class Runner implements TimeConsumingService {

  public static void main(String[] args) {
    new Runner().doStuffAsync();
  }

  public void doStuffAsync() {
    CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> this.hello("Friend"));
    CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> this.planet("Earth"));
    CompletableFuture<String> future3 = CompletableFuture.supplyAsync(() -> this.echo("Where is my echo?"));

    CompletableFuture.allOf(future1, future2, future3).join();
  }
}

Est-il un moyen de collecter les valeurs de retour de chaque appel de service et appeler la méthode byte[]‘ convert(String, String, String)?

InformationsquelleAutor saw303 | 2017-02-28