// concurrent/Batter.java // (c)2017 MindView LLC: see Copyright.txt // We make no guarantees that this code is fit for any purpose. // Visit http://OnJava8.com for more book information. import java.util.concurrent.*; import onjava.Nap; public class Batter { static class Eggs {} static class Milk {} static class Sugar {} static class Flour {} static T prepare(T ingredient) { new Nap(100); return ingredient; } static CompletableFuture cf(T ingredient) { return CompletableFuture .completedFuture(ingredient) .thenApply(Batter::prepare); } public static CompletableFuture mix() { CompletableFuture eggs = cf(new Eggs()); CompletableFuture milk = cf(new Milk()); CompletableFuture sugar = cf(new Sugar()); CompletableFuture flour = cf(new Flour()); CompletableFuture .allOf(eggs, milk, sugar, flour) .join(); new Nap(100); // Mixing time return CompletableFuture.completedFuture(new Batter()); } }