From 97b1af3175a7ee5923cfa80b874f356aee0259b1 Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Thu, 14 Dec 2023 07:19:58 +0530 Subject: [PATCH] added the code (#15272) Co-authored-by: Amit Kumatr --- .../CompletableFutureCallbackExample.java | 30 +++++++++++++ .../ListenableFutureCallbackExample.java | 42 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 core-java-modules/core-java-concurrency-advanced-5/src/main/java/com/baeldung/callback/completablefuture/CompletableFutureCallbackExample.java create mode 100644 core-java-modules/core-java-concurrency-advanced-5/src/main/java/com/baeldung/callback/listenablefuture/ListenableFutureCallbackExample.java diff --git a/core-java-modules/core-java-concurrency-advanced-5/src/main/java/com/baeldung/callback/completablefuture/CompletableFutureCallbackExample.java b/core-java-modules/core-java-concurrency-advanced-5/src/main/java/com/baeldung/callback/completablefuture/CompletableFutureCallbackExample.java new file mode 100644 index 0000000000..1c642d4ef7 --- /dev/null +++ b/core-java-modules/core-java-concurrency-advanced-5/src/main/java/com/baeldung/callback/completablefuture/CompletableFutureCallbackExample.java @@ -0,0 +1,30 @@ +package com.baeldung.callback.completablefuture; + +import java.util.concurrent.CompletableFuture; + +public class CompletableFutureCallbackExample { + public static void main(String[] args) { + CompletableFuture completableFuture = new CompletableFuture<>(); + Runnable runnable = downloadFile(completableFuture); + completableFuture.whenComplete((res, error) -> { + if (error != null) { + // handle the exception scenario + } else if (res != null) { + // send data to DB + } + }); + new Thread(runnable).start(); + } + + private static Runnable downloadFile(CompletableFuture completableFuture) { + return () -> { + try { + //logic to download file + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + completableFuture.complete("pic.jpg"); + }; + } +} diff --git a/core-java-modules/core-java-concurrency-advanced-5/src/main/java/com/baeldung/callback/listenablefuture/ListenableFutureCallbackExample.java b/core-java-modules/core-java-concurrency-advanced-5/src/main/java/com/baeldung/callback/listenablefuture/ListenableFutureCallbackExample.java new file mode 100644 index 0000000000..f3a5e889af --- /dev/null +++ b/core-java-modules/core-java-concurrency-advanced-5/src/main/java/com/baeldung/callback/listenablefuture/ListenableFutureCallbackExample.java @@ -0,0 +1,42 @@ +package com.baeldung.callback.listenablefuture; + +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.common.util.concurrent.MoreExecutors; + + +public class ListenableFutureCallbackExample { + public static void main(String[] args) { + + ExecutorService executorService = Executors.newFixedThreadPool(1); + ListeningExecutorService pool = MoreExecutors.listeningDecorator(executorService); + ListenableFuture listenableFuture = pool.submit(downloadFile()); + + Futures.addCallback(listenableFuture, new FutureCallback() { + @Override + public void onSuccess(String result) { + // code to push fileName to DB + } + + @Override + public void onFailure(Throwable throwable) { + // code to take appropriate action when there is an error + } + }, executorService); + } + + private static Callable downloadFile() { + return () -> { + // Mimicking the downloading of a file by adding a sleep call + Thread.sleep(5000); + return "pic.jpg"; + }; + } + +}