From 1c94cbc88a65cb6505a24fff390acba869913daa Mon Sep 17 00:00:00 2001 From: Yura Kukharenko Date: Fri, 6 Mar 2026 11:13:06 +0200 Subject: [PATCH 1/3] Add implementation --- .../mate/academy/AsyncRequestProcessor.java | 18 +++++++++++++++++- src/main/java/mate/academy/Main.java | 3 ++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/java/mate/academy/AsyncRequestProcessor.java b/src/main/java/mate/academy/AsyncRequestProcessor.java index ee5eea1..e564af8 100644 --- a/src/main/java/mate/academy/AsyncRequestProcessor.java +++ b/src/main/java/mate/academy/AsyncRequestProcessor.java @@ -1,16 +1,32 @@ 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 final Executor executor; + private Map cache = new ConcurrentHashMap<>(); public AsyncRequestProcessor(Executor executor) { this.executor = executor; } public CompletableFuture processRequest(String userId) { - return null; + if (cache.containsKey(userId)) { + return CompletableFuture.completedFuture(cache.get(userId)); + } + + return CompletableFuture.supplyAsync(() -> { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + UserData userData = new UserData(userId, "Some details..."); + cache.put(userId, userData); + return userData; + }); } } diff --git a/src/main/java/mate/academy/Main.java b/src/main/java/mate/academy/Main.java index a3c9b9e..9497249 100644 --- a/src/main/java/mate/academy/Main.java +++ b/src/main/java/mate/academy/Main.java @@ -2,11 +2,12 @@ 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.newFixedThreadPool(5); // Provide implementation that fits your needs AsyncRequestProcessor asyncRequestProcessor = new AsyncRequestProcessor(executor); // Simulating multiple concurrent requests From 492de4f7d70ba2b798e0b683a84270dbca733fa1 Mon Sep 17 00:00:00 2001 From: Yura Kukharenko Date: Fri, 6 Mar 2026 11:15:04 +0200 Subject: [PATCH 2/3] Checkstyle --- src/main/java/mate/academy/Main.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/mate/academy/Main.java b/src/main/java/mate/academy/Main.java index 9497249..177f40f 100644 --- a/src/main/java/mate/academy/Main.java +++ b/src/main/java/mate/academy/Main.java @@ -7,7 +7,8 @@ public class Main { public static void main(String[] args) { // Feel free to play with AsyncRequestProcessor in this main method if you want - ExecutorService executor = Executors.newFixedThreadPool(5); // Provide implementation that fits your needs + ExecutorService executor = + Executors.newFixedThreadPool(5); // Provide implementation that fits your needs AsyncRequestProcessor asyncRequestProcessor = new AsyncRequestProcessor(executor); // Simulating multiple concurrent requests From 992f7f60a247584a49bb775ed67a827eee25b609 Mon Sep 17 00:00:00 2001 From: Yura Kukharenko Date: Fri, 6 Mar 2026 11:20:08 +0200 Subject: [PATCH 3/3] Resolved issues --- src/main/java/mate/academy/AsyncRequestProcessor.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/mate/academy/AsyncRequestProcessor.java b/src/main/java/mate/academy/AsyncRequestProcessor.java index e564af8..0232e32 100644 --- a/src/main/java/mate/academy/AsyncRequestProcessor.java +++ b/src/main/java/mate/academy/AsyncRequestProcessor.java @@ -24,9 +24,9 @@ public CompletableFuture processRequest(String userId) { } catch (InterruptedException e) { throw new RuntimeException(e); } - UserData userData = new UserData(userId, "Some details..."); + UserData userData = new UserData(userId, "Some details for user " + userId); cache.put(userId, userData); return userData; - }); + }, executor); } }