diff --git a/src/main/java/mate/academy/AsyncRequestProcessor.java b/src/main/java/mate/academy/AsyncRequestProcessor.java index ee5eea1..6a41bca 100644 --- a/src/main/java/mate/academy/AsyncRequestProcessor.java +++ b/src/main/java/mate/academy/AsyncRequestProcessor.java @@ -1,9 +1,12 @@ package mate.academy; +import java.util.Map; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executor; public class AsyncRequestProcessor { + private static final Map cache = new ConcurrentHashMap<>(); private final Executor executor; public AsyncRequestProcessor(Executor executor) { @@ -11,6 +14,16 @@ public AsyncRequestProcessor(Executor executor) { } public CompletableFuture processRequest(String userId) { - return null; + return CompletableFuture.supplyAsync(() -> + cache.computeIfAbsent(userId, id -> { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new RuntimeException( + "Error while processing request: " + id, e); + } + return new UserData(id, "Details for " + id); + }), executor); } } diff --git a/src/main/java/mate/academy/Main.java b/src/main/java/mate/academy/Main.java index a3c9b9e..1799413 100644 --- a/src/main/java/mate/academy/Main.java +++ b/src/main/java/mate/academy/Main.java @@ -2,14 +2,13 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; public class Main { public static void main(String[] args) { - // Feel free to play with AsyncRequestProcessor in this main method if you want - ExecutorService executor = null; // Provide implementation that fits your needs + ExecutorService executor = Executors.newCachedThreadPool(); AsyncRequestProcessor asyncRequestProcessor = new AsyncRequestProcessor(executor); - // Simulating multiple concurrent requests String[] userIds = {"user1", "user2", "user3", "user1"}; // Note: "user1" is repeated CompletableFuture[] futures = new CompletableFuture[userIds.length]; @@ -19,7 +18,6 @@ public static void main(String[] args) { .thenAccept(userData -> System.out.println("Processed: " + userData)); } - // Wait for all futures to complete CompletableFuture.allOf(futures).join(); executor.shutdown(); }