CompleteableFuture is an extension to Java's Future API that allows us to write a non-blocking code.
It runs a task on a separate thread and notifies the main thread about its completion or failure.
ForkJoinPool.commonPool() is the default thread pool that runs the task.
CompleteableFutureExample.java
package com.kswaughs.examples;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.kswaughs.model.Book;
public class CompleteableFutureExample {
private static Logger log = LoggerFactory.getLogger("CompleteableFutureExample");
public static void main(String[] args) {
CompletableFuture<Book> resultbook = CompletableFuture.supplyAsync(() -> {
log.info("I am Taking 3 secs to return a book");
// Sleep for 3 seconds..
sleep(3000);
return getBook();
});
resultbook.thenAccept(book -> {
log.info("Book received: \n {}", book);
});
log.info("I am not waiting for the book object");
log.info("I will continue with other work..");
// To prevent this program from terminating prematurely
ForkJoinPool.commonPool().awaitQuiescence(10, TimeUnit.SECONDS);
}
private static Book getBook() {
Book book = new Book();
book.setBookId(123);
book.setAuthor("John Grisham");
book.setTitle("A Painted House");
log.info("Returning book object");
return book;
}
private static void sleep(int waitTime) {
try {
Thread.sleep(waitTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Output
21:01:42.742 [main] INFO CompleteableFutureExample - I am not waiting for the book object 21:01:42.742 [ForkJoinPool.commonPool-worker-1] INFO CompleteableFutureExample - I am Taking 3 secs to return a book 21:01:42.744 [main] INFO CompleteableFutureExample - I will continue with other work.. 21:01:45.745 [ForkJoinPool.commonPool-worker-1] INFO CompleteableFutureExample - Returning book object 21:01:45.745 [main] INFO CompleteableFutureExample - Book received: Book [bookId=123, title=A Painted House, author=John Grisham]
Great tutorial. Java provides several complex classes for various applications. Learning algorithm and data structures in Java is essential to develop solid problem-solving skills. Thank you for sharing this.
ReplyDeletebodrum
ReplyDeletehakkari
şırnak
bağcılar
tekirdağ
8UL