Skip to content

Instantly share code, notes, and snippets.

@danveloper
Created April 16, 2013 19:40
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save danveloper/5398943 to your computer and use it in GitHub Desktop.
Save danveloper/5398943 to your computer and use it in GitHub Desktop.
Java 8 CompletableFuture (Promise) and Lambda example
public class Promises {
private static class PageMetrics {
Integer visits;
Long avgMsOnPage;
@Override
public String toString() {
return String.format("{ avgMsOnPage=%d, visits=%d }", avgMsOnPage, visits);
}
}
private static class Summary {
PageMetrics pageMetrics;
long accountId;
String description;
}
public static void main(String[] args) throws Exception {
CompletableFuture<Summary> summaryPromise = CompletableFuture.supplyAsync(() -> {
System.out.println("Creating summary object");
return new Summary();
}).thenCompose((Summary summaryInstance) -> CompletableFuture.supplyAsync(() -> {
System.out.println("Populating summary object");
summaryInstance.accountId = 1l;
summaryInstance.description = "PageMetrics Summary";
// Arbitrary rest to demonstrate promise's behavior
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
//
}
return summaryInstance;
})).thenCompose((Summary summaryInstance) -> CompletableFuture.supplyAsync(() -> {
PageMetrics pageMetrics = new PageMetrics();
pageMetrics.visits = 4128;
pageMetrics.avgMsOnPage = 4000L;
summaryInstance.pageMetrics = pageMetrics;
return summaryInstance;
}));
Summary summary = summaryPromise.get();
System.out.println("Done!");
System.out.println(summary.pageMetrics);
}
}
@nihiluis
Copy link

summaryPromise.get() is just for testing purposes right? for it to be non-blocking it should be executed in a separate thread

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment