2016-12-25 12:36:49 -08:00
|
|
|
// concurrent/Batter.java
|
2021-01-31 15:42:31 -07:00
|
|
|
// (c)2021 MindView LLC: see Copyright.txt
|
2016-12-25 12:36:49 -08:00
|
|
|
// 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> T prepare(T ingredient) {
|
2017-01-22 16:48:11 -08:00
|
|
|
new Nap(0.1);
|
2016-12-25 12:36:49 -08:00
|
|
|
return ingredient;
|
|
|
|
}
|
2017-01-02 14:22:25 -08:00
|
|
|
static <T> CompletableFuture<T> prep(T ingredient) {
|
2016-12-25 12:36:49 -08:00
|
|
|
return CompletableFuture
|
|
|
|
.completedFuture(ingredient)
|
2017-01-02 14:22:25 -08:00
|
|
|
.thenApplyAsync(Batter::prepare);
|
2016-12-25 12:36:49 -08:00
|
|
|
}
|
|
|
|
public static CompletableFuture<Batter> mix() {
|
2017-01-02 14:22:25 -08:00
|
|
|
CompletableFuture<Eggs> eggs = prep(new Eggs());
|
|
|
|
CompletableFuture<Milk> milk = prep(new Milk());
|
|
|
|
CompletableFuture<Sugar> sugar = prep(new Sugar());
|
|
|
|
CompletableFuture<Flour> flour = prep(new Flour());
|
2016-12-25 12:36:49 -08:00
|
|
|
CompletableFuture
|
|
|
|
.allOf(eggs, milk, sugar, flour)
|
|
|
|
.join();
|
2017-01-22 16:48:11 -08:00
|
|
|
new Nap(0.1); // Mixing time
|
2016-12-25 12:36:49 -08:00
|
|
|
return
|
|
|
|
CompletableFuture.completedFuture(new Batter());
|
|
|
|
}
|
|
|
|
}
|