diff --git a/promise/etc/promise.png b/promise/etc/promise.png
index 1a0f67108..0aef198ac 100644
Binary files a/promise/etc/promise.png and b/promise/etc/promise.png differ
diff --git a/promise/etc/promise.ucls b/promise/etc/promise.ucls
index cdfb6ed7f..e7fefec1c 100644
--- a/promise/etc/promise.ucls
+++ b/promise/etc/promise.ucls
@@ -25,7 +25,7 @@
-
+
@@ -67,42 +67,38 @@
-
+
-
+
-
-
-
-
-
+
-
+
+
+
+
+
-
-
-
-
-
+
-
-
-
+
+
+
diff --git a/promise/src/main/java/com/iluwatar/promise/App.java b/promise/src/main/java/com/iluwatar/promise/App.java
index 3a1ecfa01..1315f0927 100644
--- a/promise/src/main/java/com/iluwatar/promise/App.java
+++ b/promise/src/main/java/com/iluwatar/promise/App.java
@@ -21,19 +21,10 @@
* THE SOFTWARE.
*/
package com.iluwatar.promise;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.net.URL;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutionException;
-import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -59,7 +50,12 @@ import java.util.concurrent.Executors;
*/
public class App {
+ private static final String URL = "https://raw.githubusercontent.com/iluwatar/java-design-patterns/Promise/promise/README.md";
+ private ExecutorService executor;
+ private CountDownLatch canStop = new CountDownLatch(2);
+
private App() {
+ executor = Executors.newFixedThreadPool(2);
}
/**
@@ -69,67 +65,80 @@ public class App {
* @throws ExecutionException if an execution error occurs.
*/
public static void main(String[] args) throws InterruptedException, ExecutionException {
- ExecutorService executor = Executors.newSingleThreadExecutor();
+ App app = new App();
try {
- promiseUsage(executor);
+ app.run();
} finally {
- executor.shutdownNow();
+ app.stop();
}
}
- private static void promiseUsage(Executor executor)
- throws InterruptedException, ExecutionException {
- String urlString = "https://raw.githubusercontent.com/iluwatar/java-design-patterns/Promise/promise/README.md";
- Promise lineCountPromise = new Promise().fulfillInAsync(() -> {
- return downloadFile(urlString);
- }, executor).then(fileLocation -> {
- return countLines(fileLocation);
- });
+ private void run() throws InterruptedException, ExecutionException {
+ promiseUsage();
+ }
+
+ private void promiseUsage() {
- Promise