{"id":40708,"date":"2025-06-27T16:08:43","date_gmt":"2025-06-27T10:38:43","guid":{"rendered":"https:\/\/mobisoftinfotech.com\/resources\/?p=40708"},"modified":"2025-11-04T11:27:43","modified_gmt":"2025-11-04T05:57:43","slug":"java-async-programming-guide","status":"publish","type":"post","link":"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide","title":{"rendered":"From Blocking to Blazing: Master Async Programming in Java Like a Pro"},"content":{"rendered":"<p>Asynchronous programming, or async programming, is the programming method used to allow a program to start an activity and continue with others while the former goes on, unlike synchronous or blocking operations. This concept is essential in understanding non-blocking I\/O in Java, especially when building scalable, reactive services.<\/p>\n\n\n\n<p>For teams looking to adopt or scale this approach efficiently, it\u2019s often valuable to<a href=\"https:\/\/mobisoftinfotech.com\/services\/hire-java-jee-programmers?utm_source=blog&amp;utm_campaign=java-async-programming_blog\"> hire Java concurrency experts<\/a> who can architect, optimize, and troubleshoot complex async workflows.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Why is Async Programming Used?<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><noscript><img decoding=\"async\" width=\"855\" height=\"737\" src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/sync-vs-async-java-diagram.png\" alt=\"Comparison of synchronous and asynchronous Java programming patterns\" class=\"wp-image-40723\" title=\"Sync vs Async Java Comparison\"><\/noscript><img decoding=\"async\" width=\"855\" height=\"737\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20855%20737%22%3E%3C%2Fsvg%3E\" alt=\"Comparison of synchronous and asynchronous Java programming patterns\" class=\"wp-image-40723 lazyload\" title=\"Sync vs Async Java Comparison\" data-src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/sync-vs-async-java-diagram.png\"><\/figure>\n\n\n\n<p><strong>In traditional (synchronous) programming:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Each task blocks the program until it completes.<br><\/li>\n\n\n\n<li>If one task is slow (e.g., a network request), it delays all other tasks.<\/li>\n<\/ul>\n\n\n\n<p><strong>In asynchronous programming in Java:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Slow operations (like reading a file, calling an API, or querying a database) are non-blocking.<br><\/li>\n\n\n\n<li>The program continues to run and is notified when the slow operation is complete.<\/li>\n<\/ul>\n\n\n\n<p>This is a key aspect of <a href=\"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide#toc-14\">Java asynchronous programming<\/a> and is widely adopted in Java reactive programming models.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Real-World Analogy<\/strong><\/h2>\n\n\n\n<p>Imagine you&#8217;re cooking dinner:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You put rice on the stove (it takes 15 minutes).<br><\/li>\n\n\n\n<li>While it&#8217;s cooking, you chop vegetables, set the table, and boil water.<br><\/li>\n\n\n\n<li>You&#8217;re not waiting idly; this mirrors asynchronous task execution.<\/li>\n<\/ul>\n\n\n\n<p>This is asynchronous behavior; you&#8217;re handling multiple things without waiting for each one to finish before starting the next. It\u2019s much like asynchronous task execution in real-world programming.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>In Programming Terms<\/strong><\/h2>\n\n\n\n<p>In many languages, async programming is supported using:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Callbacks (e.g., JavaScript)<br><\/li>\n\n\n\n<li>Futures\/Promises (e.g., Java, Python, JavaScript)<br><\/li>\n\n\n\n<li><code>async\/await<\/code> keywords (e.g., Python, JavaScript, C#, Kotlin)<br><\/li>\n\n\n\n<li>CompletableFuture in Java<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/mobisoftinfotech.com\/services\/hire-java-jee-programmers?utm_source=blog&amp;utm_campaign=java-async-programming_blog\"><noscript><img decoding=\"async\" width=\"800\" height=\"340\" src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-development-services.jpg\" alt=\" Java development services for async performance and concurrency\" class=\"wp-image-40724\" title=\"Java Concurrency &amp; Async Services \"><\/noscript><img decoding=\"async\" width=\"800\" height=\"340\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20800%20340%22%3E%3C%2Fsvg%3E\" alt=\" Java development services for async performance and concurrency\" class=\"wp-image-40724 lazyload\" title=\"Java Concurrency &amp; Async Services \" data-src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-development-services.jpg\"><\/a><\/figure>\n\n\n\n<p>Asynchronous programming might sound complex at first, but let\u2019s make it simple, fun, and tasty with pizza and juice! This blog is for Java concurrency for beginners, and we\u2019ll walk through Java\u2019s async tools step by step, using real-life metaphors.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>The Situation<\/strong><\/h3>\n\n\n\n<p>You\u2019re hungry. You order a pizza.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Do you just stand at the door and wait?<br><\/li>\n\n\n\n<li>Or do you go do other things while it\u2019s being made?<\/li>\n<\/ul>\n\n\n\n<p>This is the difference between blocking and asynchronous programming in Java.<\/p>\n\n\n\n<h3 class=\"wp-block-heading h3-list\"><strong>Blocking Way (No Async)<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-comment\">\/* Blocking way *\/<\/span>\n<span class=\"hljs-built_in\">String<\/span> pizza = orderPizza();  <span class=\"hljs-comment\">\/\/ You just wait<\/span>\nSystem.out.println(<span class=\"hljs-string\">\"Pizza is here: \"<\/span> + pizza);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>You stand at the door doing nothing until the pizza arrives.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Flow Diagram: Blocking Way<\/strong><\/h4>\n\n\n\n<figure class=\"wp-block-image size-full\"><noscript><img decoding=\"async\" width=\"855\" height=\"319\" src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/blocking-java-flow-diagram.png\" alt=\"Diagram illustrating blocking task flow in synchronous Java execution\" class=\"wp-image-40725\" title=\"Blocking Java Code Execution Flow\"><\/noscript><img decoding=\"async\" width=\"855\" height=\"319\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20855%20319%22%3E%3C%2Fsvg%3E\" alt=\"Diagram illustrating blocking task flow in synchronous Java execution\" class=\"wp-image-40725 lazyload\" title=\"Blocking Java Code Execution Flow\" data-src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/blocking-java-flow-diagram.png\"><\/figure>\n\n\n\n<h3 class=\"wp-block-heading h3-list\"><strong>&nbsp;Async Way with CompletableFuture<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">CompletableFuture&lt;<span class=\"hljs-built_in\">String<\/span>&gt; pizzaFuture = CompletableFuture.supplyAsync(() -&gt; orderPizza());\nSystem.out.println(<span class=\"hljs-string\">\"While pizza is coming, I\u2019m watching TV...\"<\/span>);\n\n<span class=\"hljs-built_in\">String<\/span> pizza = pizzaFuture.get();  <span class=\"hljs-comment\">\/\/ Wait only when needed<\/span>\nSystem.out.println(<span class=\"hljs-string\">\"Pizza is here: \"<\/span> + pizza);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\"><strong>What&#8217;s happening?<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You place the order (supplyAsync())<br><\/li>\n\n\n\n<li>You go watch TV<br><\/li>\n\n\n\n<li>You wait (get()) only when the pizza is supposed to arrive<br><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Flow Diagram: Async Way with CompletableFuture<\/strong><\/h4>\n\n\n\n<figure class=\"wp-block-image size-full\"><noscript><img decoding=\"async\" width=\"855\" height=\"810\" src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/async-completablefuture-flow-diagram.png\" alt=\"Diagram showing async flow using CompletableFuture in Java\" class=\"wp-image-40726\" title=\"Async Java Flow with CompletableFuture\"><\/noscript><img decoding=\"async\" width=\"855\" height=\"810\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20855%20810%22%3E%3C%2Fsvg%3E\" alt=\"Diagram showing async flow using CompletableFuture in Java\" class=\"wp-image-40726 lazyload\" title=\"Async Java Flow with CompletableFuture\" data-src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/async-completablefuture-flow-diagram.png\"><\/figure>\n\n\n\n<p><strong>ExecutorService = Your Delivery Team<\/strong><\/p>\n\n\n\n<p>The pizza is being delivered by your custom team (not the default one).<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">ExecutorService deliveryTeam = Executors.newFixedThreadPool(<span class=\"hljs-number\">2<\/span>);\n\nCompletableFuture&lt;<span class=\"hljs-built_in\">String<\/span>&gt; pizzaFuture = CompletableFuture.supplyAsync(() -&gt; orderPizza(), deliveryTeam);\nSystem.out.println(<span class=\"hljs-string\">\"Doing dishes while waiting for pizza...\"<\/span>);\n\n<span class=\"hljs-built_in\">String<\/span> pizza = pizzaFuture.get();\nSystem.out.println(<span class=\"hljs-string\">\"Pizza is here: \"<\/span> + pizza);\n\ndeliveryTeam.shutdown();\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Java Term<\/strong><\/td><td><strong>Pizza Example<\/strong><\/td><\/tr><tr><td><code>CompletableFuture<\/code><\/td><td>Pizza receipt \u2013 it\u2019s coming later<\/td><\/tr><tr><td><code>supplyAsync()<\/code><\/td><td>You call and place an order<\/td><\/tr><tr><td><code>get()<\/code><\/td><td>You open the door when the bell rings<\/td><\/tr><tr><td><code>ExecutorService<\/code><\/td><td>Your delivery guys (not the pizza shop\u2019s default team)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Pizza and Juice in Parallel (Hands-on Code!)<\/strong><\/h3>\n\n\n\n<p>A small Java program where you order pizza and also make juice in parallel makes async clearer.<\/p>\n\n\n\n<p>This is a practical Java multithreading tutorial showing how to:<\/p>\n\n\n\n<p>1. Order pizza (takes 3 seconds)<\/p>\n\n\n\n<p>2. Make juice (takes 2 seconds)<\/p>\n\n\n\n<p>Do both in parallel using CompletableFuture, demonstrating java parallel stream vs async execution behavior.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.util.concurrent.*;\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">PizzaAndJuice<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#091;] args) throws Exception {\n        ExecutorService executor = Executors.newFixedThreadPool(<span class=\"hljs-number\">2<\/span>);\n\n        CompletableFuture&lt;<span class=\"hljs-built_in\">String<\/span>&gt; pizzaFuture = CompletableFuture.supplyAsync(() -&gt; {\n            System.out.println(<span class=\"hljs-string\">\"Ordering pizza...\"<\/span>);\n            sleep(<span class=\"hljs-number\">3000<\/span>);\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Pizza is ready!\"<\/span>;\n        }, executor);\n\n        CompletableFuture&lt;<span class=\"hljs-built_in\">String<\/span>&gt; juiceFuture = CompletableFuture.supplyAsync(() -&gt; {\n            System.out.println(<span class=\"hljs-string\">\"Making juice...\"<\/span>);\n            sleep(<span class=\"hljs-number\">2000<\/span>);\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Juice is ready!\"<\/span>;\n        }, executor);\n\n        System.out.println(<span class=\"hljs-string\">\"I\u2019m cleaning the table while waiting...\"<\/span>);\n\n        <span class=\"hljs-built_in\">String<\/span> pizza = pizzaFuture.get();\n        <span class=\"hljs-built_in\">String<\/span> juice = juiceFuture.get();\n\n        System.out.println(pizza);\n        System.out.println(juice);\n        System.out.println(<span class=\"hljs-string\">\"Let's eat and drink!\"<\/span>);\n\n        executor.shutdown();\n    }\n\n    private <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> sleep(long ms) {\n        <span class=\"hljs-keyword\">try<\/span> { Thread.sleep(ms); } <span class=\"hljs-keyword\">catch<\/span> (InterruptedException e) { e.printStackTrace(); }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\"><strong>Sample Output:<\/strong><\/h4>\n\n\n\n<p>Ordering pizza. . .<\/p>\n\n\n\n<p>Making juice . . .<\/p>\n\n\n\n<p>I\u2019m cleaning the table while waiting . . .<\/p>\n\n\n\n<p>Juice is ready!<\/p>\n\n\n\n<p>Pizza is ready!<\/p>\n\n\n\n<p>Let&#8217;s eat and drink!<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>What does this show?<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pizza and juice are prepared at the same time, not one after the other.<\/li>\n\n\n\n<li>You\u2019re not wasting time waiting, you can clean the table meanwhile.<\/li>\n\n\n\n<li>This is how asynchronous programming helps speed things up in real life and software!<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Adding Error Handling &amp; Timeout<\/strong><\/h2>\n\n\n\n<p>Let\u2019s now take this a step further by adding:<\/p>\n\n\n\n<p>1. Error handling \u2013 What if pizza delivery fails?<\/p>\n\n\n\n<p>2. Timeout \u2013 What if the pizza takes too long?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Error handling<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">CompletableFuture&lt;<span class=\"hljs-built_in\">String<\/span>&gt; pizzaFuture = CompletableFuture.supplyAsync(() -&gt; {\n    System.out.println(<span class=\"hljs-string\">\"Ordering pizza...\"<\/span>);\n    sleep(<span class=\"hljs-number\">3000<\/span>);\n    <span class=\"hljs-keyword\">if<\/span> (<span class=\"hljs-built_in\">Math<\/span>.random() &lt; <span class=\"hljs-number\">0.5<\/span>) <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> RuntimeException(<span class=\"hljs-string\">\"Pizza shop is closed!\"<\/span>);\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Pizza is ready!\"<\/span>;\n}).exceptionally(ex -&gt; {\n    System.out.println(<span class=\"hljs-string\">\"Error: \"<\/span> + ex.getMessage());\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"No pizza today \"<\/span>;\n});<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>Timeout Handling<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">try<\/span> {\n    <span class=\"hljs-built_in\">String<\/span> pizza = pizzaFuture.get(<span class=\"hljs-number\">2<\/span>, TimeUnit.SECONDS);\n    System.out.println(pizza);\n} <span class=\"hljs-keyword\">catch<\/span> (TimeoutException e) {\n    System.out.println(<span class=\"hljs-string\">\"Pizza took too long! Canceling order.\"<\/span>);\n    pizzaFuture.cancel(<span class=\"hljs-literal\">true<\/span>);\n} <span class=\"hljs-keyword\">catch<\/span> (Exception e) {\n    System.out.println(<span class=\"hljs-string\">\"Something went wrong: \"<\/span> + e.getMessage());\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\"><strong>Sample Output 1 (Success within time):<\/strong><\/h4>\n\n\n\n<p>Ordering pizza. . .<\/p>\n\n\n\n<p>Pizza is ready!<br><\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Sample Output 2 (Shop closed):<\/strong><\/h4>\n\n\n\n<p>Ordering pizza. . .<\/p>\n\n\n\n<p>Error: Pizza shop is closed!<\/p>\n\n\n\n<p>No pizza today&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Sample Output 3 (Timeout):<\/strong><\/h4>\n\n\n\n<p>Ordering pizza. . .<\/p>\n\n\n\n<p>Pizza took too long! Canceling order.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Spring Boot Integration<\/strong><\/h2>\n\n\n\n<p>We call <code>GET \/order<\/code><\/p>\n\n\n\n<p>It will:<\/p>\n\n\n\n<p>1. Order pizza (async)<\/p>\n\n\n\n<p>2. Make juice (async)<\/p>\n\n\n\n<p>3. Wait for both to finish<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step-by-step: Async Pizza + Juice in Spring<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>1. pom.xml<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>org.springframework.boot<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>spring-boot-starter-web<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependency<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\"><strong>2. AsyncPizzaApp.java<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@SpringBootApplication\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">AsyncPizzaApp<\/span> <\/span>{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> void main(String&#091;] args) {\n        SpringApplication.run(AsyncPizzaApp<span class=\"hljs-class\">.<span class=\"hljs-keyword\">class<\/span>, <span class=\"hljs-title\">args<\/span>);\n    }\n}<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\"><strong>3. PizzaService.java<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@Service\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">PizzaService<\/span> <\/span>{\n\n    <span class=\"hljs-keyword\">public<\/span> CompletableFuture&lt;String&gt; orderPizza() {\n        <span class=\"hljs-keyword\">return<\/span> CompletableFuture.supplyAsync(() -&gt; {\n            sleep(<span class=\"hljs-number\">3000<\/span>);\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Pizza is ready!\"<\/span>;\n        });\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> CompletableFuture&lt;String&gt; makeJuice() {\n        <span class=\"hljs-keyword\">return<\/span> CompletableFuture.supplyAsync(() -&gt; {\n            sleep(<span class=\"hljs-number\">2000<\/span>);\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Juice is ready!\"<\/span>;\n        });\n    }\n\n    <span class=\"hljs-keyword\">private<\/span> void sleep(long ms) {\n        <span class=\"hljs-keyword\">try<\/span> { Thread.sleep(ms); } <span class=\"hljs-keyword\">catch<\/span> (InterruptedException e) { }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\"><strong>4. OrderController.java<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@RestController\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">OrderController<\/span> <\/span>{\n\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">final<\/span> PizzaService pizzaService;\n\n    <span class=\"hljs-keyword\">public<\/span> OrderController(PizzaService pizzaService) {\n        this.pizzaService = pizzaService;\n    }\n\n    @GetMapping(<span class=\"hljs-string\">\"\/order\"<\/span>)\n    <span class=\"hljs-keyword\">public<\/span> String orderFood() throws <span class=\"hljs-keyword\">Exception<\/span> {\n        CompletableFuture&lt;String&gt; pizzaFuture = pizzaService.orderPizza();\n        CompletableFuture&lt;String&gt; juiceFuture = pizzaService.makeJuice();\n\n        CompletableFuture.allOf(pizzaFuture, juiceFuture).join();\n\n        <span class=\"hljs-keyword\">return<\/span> pizzaFuture.get() + <span class=\"hljs-string\">\" &amp; \"<\/span> + juiceFuture.get() + <span class=\"hljs-string\">\" \u2014 Enjoy your meal!\"<\/span>;\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\"><strong>Run it!<\/strong><\/h4>\n\n\n\n<p><a href=\"http:\/\/localhost:8080\/order\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/localhost:8080\/order<\/a>&nbsp;<\/p>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Sample Output<\/strong><\/h5>\n\n\n\n<p>Pizza is ready! &amp; Juice is ready! Enjoy your meal!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Highlights:<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>Component<\/strong><\/th><th><strong>Purpose<\/strong><\/th><\/tr><\/thead><tbody><tr><td>PizzaService<\/td><td>Contains async tasks (pizza, juice)<\/td><\/tr><tr><td>CompletableFuture<\/td><td>Runs tasks in parallel<\/td><\/tr><tr><td>OrderController<\/td><td>Calls both services, waits, and returns the result<\/td><\/tr><tr><td>CompletableFuture.allOf()<\/td><td>Waits for both tasks to complete<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Advanced: Timeout, Error Handling, Custom Thread Pool<\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Timeout <\/strong>\u2013 Cancel pizza if it takes too long<\/li>\n\n\n\n<li><strong>Exception handling <\/strong>\u2013 Handle pizza shop failures<\/li>\n\n\n\n<li><strong>Custom thread pool<\/strong> \u2013 For better performance and control<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>Feature<\/strong><\/th><th><strong>Tool Used<\/strong><\/th><\/tr><\/thead><tbody><tr><td>Async tasks<\/td><td>CompletableFuture<\/td><\/tr><tr><td>Parallel execution<\/td><td>Custom ExecutorService<\/td><\/tr><tr><td>Timeout<\/td><td>completeOnTimeout()<\/td><\/tr><tr><td>Error handling<\/td><td>exceptionally()<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading h4-list\">1. <strong>AsyncConfig.java<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-keyword\">@Configuration<\/span>\npublic class AsyncConfig {\n    <span class=\"hljs-keyword\">@Bean<\/span>\n    public ExecutorService customExecutor() {\n        <span class=\"hljs-selector-tag\">return<\/span> <span class=\"hljs-selector-tag\">Executors<\/span><span class=\"hljs-selector-class\">.newFixedThreadPool<\/span>(5);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading h4-list\">2. <strong>PizzaService.java <\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@Service\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">PizzaService<\/span> <\/span>{\n\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">final<\/span> ExecutorService executor;\n\n    <span class=\"hljs-keyword\">public<\/span> PizzaService(ExecutorService executor) {\n        this.executor = executor;\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> CompletableFuture&lt;String&gt; orderPizza() {\n        <span class=\"hljs-keyword\">return<\/span> CompletableFuture.supplyAsync(() -&gt; {\n            sleep(<span class=\"hljs-number\">3000<\/span>);\n            <span class=\"hljs-keyword\">if<\/span> (Math.random() &lt; <span class=\"hljs-number\">0.5<\/span>) <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> RuntimeException(<span class=\"hljs-string\">\"Pizza oven broke!\"<\/span>);\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Pizza is ready!\"<\/span>;\n        }, executor).completeOnTimeout(<span class=\"hljs-string\">\"Pizza took too long, canceled! \"<\/span>, <span class=\"hljs-number\">2<\/span>, TimeUnit.SECONDS)\n          .exceptionally(ex -&gt; <span class=\"hljs-string\">\"Pizza failed: \"<\/span> + ex.getMessage());\n    }\n\n    <span class=\"hljs-keyword\">public<\/span> CompletableFuture&lt;String&gt; makeJuice() {\n        <span class=\"hljs-keyword\">return<\/span> CompletableFuture.supplyAsync(() -&gt; {\n            sleep(<span class=\"hljs-number\">2000<\/span>);\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Juice is ready!\"<\/span>;\n        }, executor);\n    }\n\n    <span class=\"hljs-keyword\">private<\/span> void sleep(long ms) {\n        <span class=\"hljs-keyword\">try<\/span> { Thread.sleep(ms); } <span class=\"hljs-keyword\">catch<\/span> (InterruptedException e) { }\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading h4-list\"><strong>3. FoodResponse.java<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">FoodResponse<\/span> <\/span>{\n    <span class=\"hljs-keyword\">private<\/span> String pizza;\n    <span class=\"hljs-keyword\">private<\/span> String juice;\n    <span class=\"hljs-keyword\">private<\/span> String message;\n\n    <span class=\"hljs-comment\">\/\/ Constructors, Getters, Setters<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading h4-list\">4. <strong>OrderController.java<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">@RestController\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">OrderController<\/span> <\/span>{\n\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">final<\/span> PizzaService pizzaService;\n\n    <span class=\"hljs-keyword\">public<\/span> OrderController(PizzaService pizzaService) {\n        this.pizzaService = pizzaService;\n    }\n\n    @GetMapping(<span class=\"hljs-string\">\"\/order\"<\/span>)\n    <span class=\"hljs-keyword\">public<\/span> FoodResponse orderFood() throws <span class=\"hljs-keyword\">Exception<\/span> {\n        CompletableFuture&lt;String&gt; pizzaFuture = pizzaService.orderPizza();\n        CompletableFuture&lt;String&gt; juiceFuture = pizzaService.makeJuice();\n\n        CompletableFuture.allOf(pizzaFuture, juiceFuture).join();\n\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">new<\/span> FoodResponse(pizzaFuture.get(), juiceFuture.get(), <span class=\"hljs-string\">\"Enjoy your meal!\"<\/span>);\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading h4-list\">5. <strong>Application.properties<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">spring.jackson.serialization.indent-output=<span class=\"hljs-literal\">true<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h5 class=\"wp-block-heading\"><strong>Sample Output<\/strong><\/h5>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{\n  <span class=\"hljs-attr\">\"pizza\"<\/span>: <span class=\"hljs-string\">\"Pizza is ready!\"<\/span>,\n  <span class=\"hljs-attr\">\"juice\"<\/span>: <span class=\"hljs-string\">\"Juice is ready!\"<\/span>,\n  <span class=\"hljs-attr\">\"message\"<\/span>: <span class=\"hljs-string\">\"Enjoy your meal!\"<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Or:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{\n  <span class=\"hljs-attr\">\"pizza\"<\/span>: <span class=\"hljs-string\">\"Pizza took too long, canceled! \"<\/span>,\n  <span class=\"hljs-attr\">\"juice\"<\/span>: <span class=\"hljs-string\">\"Juice is ready!\"<\/span>,\n  <span class=\"hljs-attr\">\"message\"<\/span>: <span class=\"hljs-string\">\"Enjoy your meal!\"<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\"><strong>Is This Truly Non-blocking?<\/strong><\/h2>\n\n\n\n<p>&nbsp;Is the example above (with CompletableFuture) a pattern for a non-blocking API in Spring MVC?<\/p>\n\n\n\n<p><strong>The answer is:<\/strong><\/p>\n\n\n\n<p>1) Yes, but only partially.<\/p>\n\n\n\n<p>2)&nbsp; It\u2019s not truly non-blocking from end-to-end in traditional Spring MVC.<\/p>\n\n\n\n<p>Great for speeding up I\/O-heavy work like file ops, DB, HTTP calls, or even implementing<a href=\"https:\/\/mobisoftinfotech.com\/services\/devops?utm_source=blog&amp;utm_campaign=java-async-programming_blog\"> DevOps for scalable Java applications<\/a> that require non-blocking backend services.<\/p>\n\n\n\n<p>Let\u2019s break this down using Java concurrency principles:<\/p>\n\n\n\n<p><strong>We used:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>CompletableFuture.supplyAsync() to run tasks in parallel.<\/li>\n\n\n\n<li>Returned a normal JSON response from the controller (FoodResponse).<\/li>\n<\/ul>\n\n\n\n<p><strong>Benefits<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Internal processing is concurrent\/asynchronous.<\/li>\n\n\n\n<li>Fast, simple, and it works in traditional Spring MVC.<\/li>\n\n\n\n<li>Good for speeding up I\/O-heavy work like file ops, DB, HTTP calls, etc.<\/li>\n<\/ul>\n\n\n\n<p><strong>Limitation<\/strong>:<\/p>\n\n\n\n<p>The Servlet thread is still blocked while waiting for pizzaFuture.get() and juiceFuture.get().<\/p>\n\n\n\n<p>So it&#8217;s asynchronous internally, but blocking externally.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>TRUE Non-blocking APIs in Spring (End-to-End)<\/strong><\/h3>\n\n\n\n<p>To make it fully non-blocking, including the HTTP layer, you need:<\/p>\n\n\n\n<h4 class=\"wp-block-heading h4-list\">1. WebFlux (Reactive Spring)<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Based on Reactor and Netty, not Tomcat.<\/li>\n\n\n\n<li>Uses Mono and Flux instead of CompletableFuture.<\/li>\n\n\n\n<li>Truly non-blocking from request to response.<\/li>\n<\/ul>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Example:<\/strong><\/h5>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">@GetMapping(<span class=\"hljs-string\">\"\/order\"<\/span>)\npublic Mono&lt;FoodResponse&gt; orderFood() {\n    Mono&lt;<span class=\"hljs-built_in\">String<\/span>&gt; pizza = orderPizzaAsync();\n    Mono&lt;<span class=\"hljs-built_in\">String<\/span>&gt; juice = makeJuiceAsync();\n\n    <span class=\"hljs-keyword\">return<\/span> Mono.zip(pizza, juice)\n               .map(tuple -&gt; <span class=\"hljs-keyword\">new<\/span> FoodResponse(tuple.getT1(), tuple.getT2(), <span class=\"hljs-string\">\"Enjoy!\"<\/span>));\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading h4-list\">2. <strong>Callable or DeferredResult in Spring MVC&nbsp; (semi-non-blocking)<\/strong><\/h4>\n\n\n\n<p>Spring MVC also supports asynchronous request processing using:<\/p>\n\n\n\n<p><code>Callable&lt;T&gt;<\/code> (simple async task)<\/p>\n\n\n\n<p><code>DeferredResult&lt;T&gt;<\/code> (more flexible)<\/p>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Example with Callable:<\/strong><\/h5>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">@GetMapping(<span class=\"hljs-string\">\"\/order\"<\/span>)\npublic Callable&lt;FoodResponse&gt; orderAsync() {\n    <span class=\"hljs-keyword\">return<\/span> () -&gt; {\n        <span class=\"hljs-built_in\">String<\/span> pizza = pizzaService.orderPizza().get();\n        <span class=\"hljs-built_in\">String<\/span> juice = pizzaService.makeJuice().get();\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">new<\/span> FoodResponse(pizza, juice, <span class=\"hljs-string\">\"Enjoy!\"<\/span>);\n    };\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This tells the Servlet container (e.g., Tomcat):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u201cRelease the thread for now.\u201d<\/li>\n\n\n\n<li>\u201cResume response when the result is ready.\u201d<\/li>\n<\/ul>\n\n\n\n<p>A clean balance between <strong>async vs sync in Java<\/strong> inside web contexts.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Pattern<\/strong><\/td><td><strong>Internally Async<\/strong><\/td><td><strong>Fully Non-blocking at HTTP Level<\/strong><\/td><td><strong>Framework<\/strong><\/td><\/tr><tr><td><code>CompletableFuture + get()<\/code><\/td><td>Yes<\/td><td>No<\/td><td>Spring MVC<\/td><\/tr><tr><td><code>Callable \/ DeferredResult<\/code><\/td><td>Yes<\/td><td>Yes<\/td><td>Spring MVC<\/td><\/tr><tr><td><code>Mono \/ Flux<\/code><\/td><td>Yes<\/td><td>Yes<\/td><td>Spring WebFlux<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Summary :<\/strong><\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you&#8217;re using Spring MVC and want non-blocking APIs:<\/li>\n\n\n\n<li>Use Callable or DeferredResult<\/li>\n\n\n\n<li>Use WebAsyncTask for timeouts<\/li>\n\n\n\n<li>Move to Spring WebFlux only if you need a full reactive stack<\/li>\n<\/ul>\n\n\n\n<p>To go truly non-blocking, use WebFlux or Spring MVC\u2019s Callable. This is essential if you want to<a href=\"https:\/\/mobisoftinfotech.com\/resources\/blog\/web-development\/opentelemetry-java-spring-boot-integration?utm_source=blog&amp;utm_campaign=java-async-programming_blog\"> monitor asynchronous Java tasks<\/a> and performance metrics via OpenTelemetry or distributed tracing systems.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Final Thoughts<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>CompletableFuture<\/code> makes async programming intuitive.<\/li>\n\n\n\n<li>Use <code>ExecutorService<\/code> for performance control.<\/li>\n\n\n\n<li><code>completeOnTimeout()<\/code> and <code>exceptionally()<\/code> = essential for real-world resilience.<\/li>\n\n\n\n<li>Spring MVC supports semi-async with <code>Callable<\/code>; full async needs WebFlux.<\/li>\n<\/ul>\n\n\n\n<p>Now you can enjoy pizza and parallel programming without blocking!<\/p>\n\n\n\n<p>Absolutely! Let\u2019s replace the playful example with a professional, real-world mini project that demonstrates the practical use of CompletableFuture and asynchronous programming in a Spring Boot application.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Mini Project: Asynchronous Document Processing Service<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading h3-list\"><strong>Real-World Scenario:<\/strong><\/h3>\n\n\n\n<p>Your company provides an API for uploading documents (PDF, Word, etc.) that performs:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>&nbsp;Metadata extraction (e.g., title, author, page count)<\/li>\n\n\n\n<li>&nbsp;Virus scanning for uploaded files<\/li>\n\n\n\n<li>&nbsp;Returns the combined result in JSON when both tasks are done<\/li>\n<\/ol>\n\n\n\n<p>These are independent operations and can be processed in parallel.<\/p>\n\n\n\n<h3 class=\"wp-block-heading h3-list\"><strong>Technologies Used<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Java 11<\/li>\n\n\n\n<li>Spring Boot 3.x<\/li>\n\n\n\n<li>CompletableFuture with custom ExecutorService<\/li>\n\n\n\n<li>RESTful API with Spring Web<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading h3-list\"><strong>Project Structure<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">src<\/span>\n\u2514\u2500\u2500 <span class=\"hljs-selector-tag\">main<\/span>\n    \u2514\u2500\u2500 <span class=\"hljs-selector-tag\">java<\/span>\n        \u2514\u2500\u2500 <span class=\"hljs-selector-tag\">com<\/span><span class=\"hljs-selector-class\">.mobisoftinfotech<\/span><span class=\"hljs-selector-class\">.documentprocessor<\/span>\n            \u251c\u2500\u2500 <span class=\"hljs-selector-tag\">DocumentProcessorApplication<\/span><span class=\"hljs-selector-class\">.java<\/span>\n            \u251c\u2500\u2500 <span class=\"hljs-selector-tag\">config<\/span>\n            \u2502   \u2514\u2500\u2500 <span class=\"hljs-selector-tag\">AsyncConfig<\/span><span class=\"hljs-selector-class\">.java<\/span>\n            \u251c\u2500\u2500 <span class=\"hljs-selector-tag\">controller<\/span>\n            \u2502   \u2514\u2500\u2500 <span class=\"hljs-selector-tag\">DocumentController<\/span><span class=\"hljs-selector-class\">.java<\/span>\n            \u251c\u2500\u2500 <span class=\"hljs-selector-tag\">dto<\/span>\n            \u2502   \u2514\u2500\u2500 <span class=\"hljs-selector-tag\">DocumentResponse<\/span><span class=\"hljs-selector-class\">.java<\/span>\n            \u2514\u2500\u2500 <span class=\"hljs-selector-tag\">service<\/span>\n                \u2514\u2500\u2500 <span class=\"hljs-selector-tag\">DocumentService<\/span><span class=\"hljs-selector-class\">.java<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading h3-list\"><strong>Step-by-Step Code<\/strong><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">1. <strong>Pom.xml (dependencies)<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependencies<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>org.springframework.boot<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">groupId<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>spring-boot-starter-web<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">artifactId<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependency<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">dependencies<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-21\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">2. <strong>DocumentProcessorApplication.java<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-22\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">package com.example.documentprocessor;\n\n<span class=\"hljs-keyword\">import<\/span> org.springframework.boot.SpringApplication;\n<span class=\"hljs-keyword\">import<\/span> org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">DocumentProcessorApplication<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#091;] args) {\n        SpringApplication.run(DocumentProcessorApplication.class, args);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-22\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">3. <strong>Config\/AsyncConfig.java<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-23\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">package com.example.documentprocessor.config;\n\n<span class=\"hljs-keyword\">import<\/span> org.springframework.context.annotation.Bean;\n<span class=\"hljs-keyword\">import<\/span> org.springframework.context.annotation.Configuration;\n\n<span class=\"hljs-keyword\">import<\/span> java.util.concurrent.ExecutorService;\n<span class=\"hljs-keyword\">import<\/span> java.util.concurrent.Executors;\n\n@Configuration\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">AsyncConfig<\/span> <\/span>{\n\n    @Bean\n    public ExecutorService executorService() {\n        <span class=\"hljs-keyword\">return<\/span> Executors.newFixedThreadPool(<span class=\"hljs-number\">5<\/span>); <span class=\"hljs-comment\">\/\/ For parallel tasks<\/span>\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-23\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">4. <strong>Dto\/DocumentResponse.java<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-24\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">package com.example.documentprocessor.dto;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">DocumentResponse<\/span> <\/span>{\n    private <span class=\"hljs-built_in\">String<\/span> metadata;\n    private <span class=\"hljs-built_in\">String<\/span> virusScanResult;\n    private <span class=\"hljs-built_in\">String<\/span> message;\n\n    public DocumentResponse() {}\n\n    public DocumentResponse(<span class=\"hljs-built_in\">String<\/span> metadata, <span class=\"hljs-built_in\">String<\/span> virusScanResult, <span class=\"hljs-built_in\">String<\/span> message) {\n        <span class=\"hljs-keyword\">this<\/span>.metadata = metadata;\n        <span class=\"hljs-keyword\">this<\/span>.virusScanResult = virusScanResult;\n        <span class=\"hljs-keyword\">this<\/span>.message = message;\n    }\n\n    public <span class=\"hljs-built_in\">String<\/span> getMetadata() { <span class=\"hljs-keyword\">return<\/span> metadata; }\n    public <span class=\"hljs-keyword\">void<\/span> setMetadata(<span class=\"hljs-built_in\">String<\/span> metadata) { <span class=\"hljs-keyword\">this<\/span>.metadata = metadata; }\n\n    public <span class=\"hljs-built_in\">String<\/span> getVirusScanResult() { <span class=\"hljs-keyword\">return<\/span> virusScanResult; }\n    public <span class=\"hljs-keyword\">void<\/span> setVirusScanResult(<span class=\"hljs-built_in\">String<\/span> virusScanResult) { <span class=\"hljs-keyword\">this<\/span>.virusScanResult = virusScanResult; }\n\n    public <span class=\"hljs-built_in\">String<\/span> getMessage() { <span class=\"hljs-keyword\">return<\/span> message; }\n    public <span class=\"hljs-keyword\">void<\/span> setMessage(<span class=\"hljs-built_in\">String<\/span> message) { <span class=\"hljs-keyword\">this<\/span>.message = message; }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-24\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">5. <strong>Service\/DocumentService.java<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-25\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">package com.example.documentprocessor.service;\n\n<span class=\"hljs-keyword\">import<\/span> org.springframework.stereotype.Service;\n\n<span class=\"hljs-keyword\">import<\/span> java.util.concurrent.*;\n\n@Service\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">DocumentService<\/span> <\/span>{\n\n    private final ExecutorService executor;\n\n    public DocumentService(ExecutorService executor) {\n        <span class=\"hljs-keyword\">this<\/span>.executor = executor;\n    }\n\n    public CompletableFuture&lt;<span class=\"hljs-built_in\">String<\/span>&gt; extractMetadata(<span class=\"hljs-built_in\">String<\/span> fileName) {\n        <span class=\"hljs-keyword\">return<\/span> CompletableFuture.supplyAsync(() -&gt; {\n            System.out.println(<span class=\"hljs-string\">\"Extracting metadata for \"<\/span> + fileName);\n            sleep(<span class=\"hljs-number\">3000<\/span>);\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Metadata: Title=Report, Pages=12\"<\/span>;\n        }, executor).completeOnTimeout(<span class=\"hljs-string\">\"Metadata extraction timeout!\"<\/span>, <span class=\"hljs-number\">2<\/span>, TimeUnit.SECONDS)\n          .exceptionally(ex -&gt; <span class=\"hljs-string\">\"Metadata failed: \"<\/span> + ex.getMessage());\n    }\n\n    public CompletableFuture&lt;<span class=\"hljs-built_in\">String<\/span>&gt; scanForVirus(<span class=\"hljs-built_in\">String<\/span> fileName) {\n        <span class=\"hljs-keyword\">return<\/span> CompletableFuture.supplyAsync(() -&gt; {\n            System.out.println(<span class=\"hljs-string\">\"Scanning for virus: \"<\/span> + fileName);\n            sleep(<span class=\"hljs-number\">2000<\/span>);\n            <span class=\"hljs-keyword\">if<\/span> (<span class=\"hljs-built_in\">Math<\/span>.random() &lt; <span class=\"hljs-number\">0.3<\/span>) {\n                <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> RuntimeException(<span class=\"hljs-string\">\"Virus scan engine error\"<\/span>);\n            }\n            <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">\"Scan Result: No virus found\"<\/span>;\n        }, executor).completeOnTimeout(<span class=\"hljs-string\">\"Scan timeout!\"<\/span>, <span class=\"hljs-number\">3<\/span>, TimeUnit.SECONDS)\n          .exceptionally(ex -&gt; <span class=\"hljs-string\">\"Scan failed: \"<\/span> + ex.getMessage());\n    }\n\n\n\n    private <span class=\"hljs-keyword\">void<\/span> sleep(long ms) {\n        <span class=\"hljs-keyword\">try<\/span> {\n            Thread.sleep(ms);\n        } <span class=\"hljs-keyword\">catch<\/span> (InterruptedException e) {\n            <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> RuntimeException(e);\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-25\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">6. <strong>Controller\/DocumentController.java<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-26\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">package com.example.documentprocessor.controller;\n\n<span class=\"hljs-keyword\">import<\/span> com.example.documentprocessor.dto.DocumentResponse;\n<span class=\"hljs-keyword\">import<\/span> com.example.documentprocessor.service.DocumentService;\n<span class=\"hljs-keyword\">import<\/span> org.springframework.web.bind.annotation.GetMapping;\n<span class=\"hljs-keyword\">import<\/span> org.springframework.web.bind.annotation.RequestParam;\n<span class=\"hljs-keyword\">import<\/span> org.springframework.web.bind.annotation.RestController;\n\n<span class=\"hljs-keyword\">import<\/span> java.util.concurrent.CompletableFuture;\n\n@RestController\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">DocumentController<\/span> <\/span>{\n\n    private final DocumentService documentService;\n\n    public DocumentController(DocumentService documentService) {\n        <span class=\"hljs-keyword\">this<\/span>.documentService = documentService;\n    }\n\n    @GetMapping(<span class=\"hljs-string\">\"\/process\"<\/span>)\n    public DocumentResponse processDocument(@RequestParam(defaultValue = <span class=\"hljs-string\">\"report.pdf\"<\/span>) <span class=\"hljs-built_in\">String<\/span> file) throws Exception {\n        CompletableFuture&lt;<span class=\"hljs-built_in\">String<\/span>&gt; metadataFuture = documentService.extractMetadata(file);\n        CompletableFuture&lt;<span class=\"hljs-built_in\">String<\/span>&gt; scanFuture = documentService.scanForVirus(file);\n\n        CompletableFuture.allOf(metadataFuture, scanFuture).join();\n\n        <span class=\"hljs-built_in\">String<\/span> metadata = metadataFuture.get();\n        <span class=\"hljs-built_in\">String<\/span> scanResult = scanFuture.get();\n\n        <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-keyword\">new<\/span> DocumentResponse(metadata, scanResult, <span class=\"hljs-string\">\"Document processed.\"<\/span>);\n    }\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-26\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h4 class=\"wp-block-heading\">7. <strong>Application.properties<\/strong><\/h4>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-27\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">spring.jackson.serialization.indent-output=<span class=\"hljs-literal\">true<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-27\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>Run &amp; Test<\/strong><\/h3>\n\n\n\n<p>Start the application and test:<\/p>\n\n\n\n<p><strong>URL: <\/strong>curl &#8220;<a href=\"http:\/\/localhost:8080\/process?file=report.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">http:\/\/localhost:8080\/process?file=report.pdf<\/a>&#8221;&nbsp;<\/p>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Example Output (success):<\/strong><\/h5>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-28\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{\n  <span class=\"hljs-attr\">\"metadata\"<\/span>: <span class=\"hljs-string\">\"Metadata: Title=Report, Pages=12\"<\/span>,\n  <span class=\"hljs-attr\">\"virusScanResult\"<\/span>: <span class=\"hljs-string\">\"Scan Result: No virus found\"<\/span>,\n  <span class=\"hljs-attr\">\"message\"<\/span>: <span class=\"hljs-string\">\"Document processed.\"<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-28\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h5 class=\"wp-block-heading\"><strong>Example Output (with error):<\/strong><\/h5>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-29\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{\n  <span class=\"hljs-attr\">\"metadata\"<\/span>: <span class=\"hljs-string\">\"Metadata: Title=Report, Pages=12\"<\/span>,\n  <span class=\"hljs-attr\">\"virusScanResult\"<\/span>: <span class=\"hljs-string\">\"Scan failed: Virus scan engine error\"<\/span>,\n  <span class=\"hljs-attr\">\"message\"<\/span>: <span class=\"hljs-string\">\"Document processed.\"<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-29\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<figure class=\"wp-block-image size-full\"><noscript><img decoding=\"async\" width=\"855\" height=\"478\" src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-async-step-by-step-code.png\" alt=\"Step-by-step Java async code for scalable backend execution\" class=\"wp-image-40727\" title=\"Java Async Programming \u2013 Step-by-Step Code\"><\/noscript><img decoding=\"async\" width=\"855\" height=\"478\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20855%20478%22%3E%3C%2Fsvg%3E\" alt=\"Step-by-step Java async code for scalable backend execution\" class=\"wp-image-40727 lazyload\" title=\"Java Async Programming \u2013 Step-by-Step Code\" data-src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-async-step-by-step-code.png\"><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Real-World Relevance<\/strong><\/h2>\n\n\n\n<p>This project simulates:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>File processing pipelines<\/li>\n\n\n\n<li>Non-blocking concurrent backend operations<\/li>\n\n\n\n<li>Timeout\/error recovery in long-running operations (e.g., cloud scans, OCR, antivirus)<\/li>\n<\/ul>\n\n\n\n<p>These are independent operations and can be processed in parallel, even more so when you<a href=\"https:\/\/mobisoftinfotech.com\/resources\/blog\/securing-api-leveraging-hmac-api-security-java?utm_source=blog&amp;utm_campaign=java-async-programming_blog\"> secure async API calls in Java<\/a> to maintain end-to-end data integrity.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p>Asynchronous programming in Java may seem complex at first, but it becomes a powerful ally once you grasp the core concepts. From basic <code>CompletableFuture<\/code> usage to integrating async patterns into real-world Spring Boot applications, you now have a strong foundation to build non-blocking I\/O in Java, efficient, and scalable services.<\/p>\n\n\n\n<p>By mastering async constructs like <code>CompletableFuture<\/code>, handling exceptions, managing timeouts, and applying these patterns to production-like scenarios, you&#8217;re not just writing faster code; you\u2019re writing smarter code. Concepts such as Java thread management and practical examples like a java executorservice example are critical for building reliable systems.&nbsp; You can even explore advanced patterns like<a href=\"https:\/\/mobisoftinfotech.com\/resources\/blog\/opensearch-java-client-spring-boot-search-integration?utm_source=blog&amp;utm_campaign=java-async-programming_blog\"> Java async search integration<\/a> to enhance your application\u2019s search capabilities.<\/p>\n\n\n\n<p>To explore the full working code,&nbsp; Mini project setup, check out the complete source on <a href=\"https:\/\/github.com\/mobisoftinfotech\/java-async-programming\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub<\/a><\/p>\n\n\n\n<p>Keep experimenting, profiling, and applying these concepts in your projects. That\u2019s how theory turns into mastery with practical Java performance tuning along the way.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/mobisoftinfotech.com\/contact-us?utm_source=blog_cta&amp;utm_campaign=java-async-programming_blog\"><noscript><img decoding=\"async\" width=\"855\" height=\"363\" src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/async-java-app-development.png\" alt=\"Scalable Java solutions for modern asynchronous application needs\" class=\"wp-image-40728\" title=\"Async Java App Development CTA\"><\/noscript><img decoding=\"async\" width=\"855\" height=\"363\" src=\"data:image\/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%20855%20363%22%3E%3C%2Fsvg%3E\" alt=\"Scalable Java solutions for modern asynchronous application needs\" class=\"wp-image-40728 lazyload\" title=\"Async Java App Development CTA\" data-src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/async-java-app-development.png\"><\/a><\/figure>\n\n\n<div class=\"modern-author-card\">\n    <div class=\"author-card-content\">\n        <div class=\"author-info-section\">\n            <div class=\"author-avatar\">\n                <noscript><img decoding=\"async\" src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/rushikesh-keskar-author.png\" alt=\"Rushikesh Keskar\"><\/noscript><img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"Rushikesh Keskar\" data-src=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/rushikesh-keskar-author.png\" class=\" lazyload\">\n            <\/div>\n            <div class=\"author-details\">\n                <h3 class=\"author-name\">Rushikesh Keskar<\/h3>\n                <p class=\"author-title\">Senior Software Engineer<\/p>\n                <a href=\"javascript:void(0);\" class=\"read-more-link read-more-btn\" onclick=\"toggleAuthorBio(this); return false;\">Read more <noscript><img decoding=\"async\" src=\"\/assets\/images\/blog\/Vector.png\" alt=\"expand\" class=\"read-more-arrow down-arrow\"><\/noscript><img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"expand\" class=\"read-more-arrow down-arrow lazyload\" data-src=\"\/assets\/images\/blog\/Vector.png\"><\/a>\n                <div class=\"author-bio-expanded\">\n                    <p>Rushikesh Keskar is a Senior Software Engineer at <a href=\"https:\/\/mobisoftinfotech.com\">Mobisoft Infotech<\/a> Pvt Ltd with more than 10 years of experience in backend development. Skilled in Java, Spring Boot, REST APIs, PostgreSQL, and third-party service integrations, he specializes in building scalable and efficient enterprise solutions. His expertise includes REST API development, database and code optimization, and resolving critical production issues.<\/p>\n                    \n                    <a href=\"javascript:void(0);\" class=\"read-more-link read-less-btn\" onclick=\"toggleAuthorBio(this); return false;\" style=\"display: none;\">Read less <noscript><img decoding=\"async\" src=\"\/assets\/images\/blog\/Vector.png\" alt=\"collapse\" class=\"read-more-arrow up-arrow\"><\/noscript><img decoding=\"async\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"collapse\" class=\"read-more-arrow up-arrow lazyload\" data-src=\"\/assets\/images\/blog\/Vector.png\"><\/a>\n                <\/div>\n            <\/div>\n        <\/div>\n        <div class=\"share-section\">\n            <span class=\"share-label\">Share Article<\/span>\n            <div class=\"social-share-buttons\">\n                <a href=\"https:\/\/www.facebook.com\/sharer\/sharer.php?u=https%3A%2F%2Fmobisoftinfotech.com%2Fresources%2Fblog%2Fjava-programming%2Fjava-async-programming-guide\" target=\"_blank\" class=\"share-btn facebook-share\"><i class=\"fa fa-facebook-f\"><\/i><\/a>\n                <a href=\"https:\/\/www.linkedin.com\/sharing\/share-offsite\/?url=https%3A%2F%2Fmobisoftinfotech.com%2Fresources%2Fblog%2Fjava-programming%2Fjava-async-programming-guide\" target=\"_blank\" class=\"share-btn linkedin-share\"><i class=\"fa fa-linkedin\"><\/i><\/a>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n\n\n<style>\n.hljs-title, .hljs-section, .hljs-keyword, .hljs-attribute, .hljs-selector-tag, .hljs-meta-keyword, .hljs-doctag, .hljs-name{    font-weight: normal;}\n.post-details-title{font-size:42px}\nh6.wp-block-heading {\n    line-height: 2;\n}\n.social-icon{\ntext-align:left;\n}\nspan.bullet{\nposition: relative;\npadding-left:20px;\n}\n.ta-l,.post-content .auth-name{\ntext-align:left;\n}\nspan.bullet:before {\n    content: '';\n    width: 9px;\n    height: 9px;\n    background-color: #0d265c;\n    border-radius: 50%;\n    position: absolute;\n    left: 0px;\n    top: 3px;\n}\n.post-content p{\n    margin: 20px 0 20px;\n}\n.image-container{\n    margin: 0 auto;\n    width: 50%;\n}\nh5.wp-block-heading{\nfont-size:20px;\n}\nh4.wp-block-heading{\nfont-size:20px;\n}\nh3.wp-block-heading{\nfont-size:22px;\n}\nh3.wp-block-heading.h3-list {\n    position: relative;\nfont-size:20px;\n    padding-left: 20px;\n}\n\nh3.wp-block-heading.h3-list:before {\n    position: absolute;\n    content: '';\n    background: #0d265c;\n    height: 9px;\n    width: 9px;\n    left: 0;\n    border-radius: 50px;\n    top: 8px;\n}\n@media only screen and (max-width: 991px) {\nul.wp-block-list.step-9-ul {\n    margin-left: 0px;\n}\n.step-9-h4{padding-left:0px;}\n    .post-content li {\n       padding-left: 25px;\n    }\n    .post-content li:before {\n        content: '';\n         width: 9px;\n        height: 9px;\n        background-color: #0d265c;\n        border-radius: 50%;\n        position: absolute;\n        left: 0px;\n        top: 12px;\n    }\n}\n@media (max-width:767px) {\n  .image-container{\n    width:90% !important;\n  }\n  \n}\n<\/style>\n<script type=\"application\/ld+json\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"Article\",\n  \"mainEntityOfPage\": {\n    \"@type\": \"WebPage\",\n    \"@id\": \"https:\/\/mobisoftinfotech.com\/resources\/blog\/data-engineering-analytics\/java-async-programming-guide\"\n  },\n  \"headline\": \"From Blocking to Blazing: Master Async Programming in Java Like a Pro\",\n  \"description\": \"Master async programming in Java using Completable Future, non-blocking I\/O & concurrency best practices to boost speed and scalability.\",\n  \"image\": \"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-async-programming-guide\",\n  \"author\": {\n    \"@type\": \"Person\",\n    \"name\": \"Rushikesh Keskar\",\n    \"description\": \"Rushikesh Keskar is a Senior Software Engineer at Mobisoft Infotech Pvt Ltd with more than 10 years of experience in backend development. Skilled in Java, Spring Boot, REST APIs, PostgreSQL, and third-party service integrations, he specializes in building scalable and efficient enterprise solutions. His expertise includes REST API development, database and code optimization, and resolving critical production issues.\"\n  },\n  \"publisher\": {\n    \"@type\": \"Organization\",\n    \"name\": \"Mobisoft Infotech\",\n    \"logo\": {\n      \"@type\": \"ImageObject\",\n      \"url\": \"https:\/\/mobisoftinfotech.com\/assets\/images\/mshomepage\/MI_Logo-white.svg\",\n      \"width\": 600,\n      \"height\": 600\n    }\n  },\n  \"datePublished\": \"2025-06-27\",\n  \"dateModified\": \"2025-06-27\"\n}\n<\/script>\n <script type=\"application\/ld+json\">\n{\n    \"@context\": \"https:\/\/schema.org\",\n    \"@type\": \"LocalBusiness\",\n    \"name\": \"Mobisoft Infotech\",\n    \"url\": \"https:\/\/mobisoftinfotech.com\",\n    \"logo\": \"https:\/\/mobisoftinfotech.com\/assets\/images\/mshomepage\/MI_Logo-white.svg\",\n    \"description\": \"Mobisoft Infotech specializes in custom software development and digital solutions.\",\n    \"address\": {\n        \"@type\": \"PostalAddress\",\n        \"streetAddress\": \"5718 Westheimer Rd Suite 1000\",\n        \"addressLocality\": \"Houston\",\n        \"addressRegion\": \"TX\",\n        \"postalCode\": \"77057\",\n        \"addressCountry\": \"USA\"\n    },\n    \"contactPoint\": [{\n        \"@type\": \"ContactPoint\",\n        \"telephone\": \"+1-855-572-2777\",\n        \"contactType\": \"Customer Service\",\n        \"areaServed\": [\"USA\", \"Worldwide\"],\n        \"availableLanguage\": [\"English\"]\n    }],\n    \"sameAs\": [\n        \"https:\/\/www.facebook.com\/pages\/Mobisoft-Infotech\/131035500270720\",\n        \"https:\/\/x.com\/MobisoftInfo\",\n        \"https:\/\/www.linkedin.com\/company\/mobisoft-infotech\",\n        \"https:\/\/in.pinterest.com\/mobisoftinfotech\/\",\n        \"https:\/\/www.instagram.com\/mobisoftinfotech\/\",\n        \"https:\/\/github.com\/MobisoftInfotech\",\n        \"https:\/\/www.behance.net\/MobisoftInfotech\",\n        \"https:\/\/www.youtube.com\/@MobisoftinfotechHouston\"\n    ]\n}\n<\/script>\n<script type=\"application\/ld+json\">\n    [\n    {\n            \"@context\": \"https:\/\/schema.org\",\n            \"@type\": \"ImageObject\",\n            \"contentUrl\": \"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-async-programming-guide.png\",\n            \"url\": \"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide\",\n            \"name\": \"From Blocking to Blazing: Master Async Programming in Java Like a Pro\",\n            \"caption\": \"Master async programming in Java for blazing-fast, scalable backend systems.\",\n            \"description\": \"Hero banner highlighting the importance of asynchronous programming in Java for building scalable enterprise applications..\",\n            \"license\": \"https:\/\/mobisoftinfotech.com\/terms\",\n            \"acquireLicensePage\": \"https:\/\/mobisoftinfotech.com\/acquire-license\",\n            \"creditText\": \"Mobisoft Infotech\",\n            \"copyrightNotice\": \"Mobisoft Infotech\",\n            \"creator\": {\n                \"@type\": \"Organization\",\n                \"name\": \"Mobisoft Infotech\"\n            },\n            \"thumbnail\": \"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-async-programming-guide.png\"\n        },\n        {\n            \"@context\": \"https:\/\/schema.org\",\n            \"@type\": \"ImageObject\",\n            \"contentUrl\": \"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-development-services.png\",\n            \"url\": \"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide\",\n            \"name\": \"Java Concurrency & Async Services\",\n            \"caption\": \"Drive efficiency with full-cycle Java development tailored to your goals.\",\n            \"description\": \"Promotional image showcasing custom Java solutions focused on concurrency, async programming, and scalability.\",\n            \"license\": \"https:\/\/mobisoftinfotech.com\/terms\",\n            \"acquireLicensePage\": \"https:\/\/mobisoftinfotech.com\/acquire-license\",\n            \"creditText\": \"Mobisoft Infotech\",\n            \"copyrightNotice\": \"Mobisoft Infotech\",\n            \"creator\": {\n                \"@type\": \"Organization\",\n                \"name\": \"Mobisoft Infotech\"\n            },\n            \"thumbnail\": \"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-development-services.png\"\n        },\n        {\n            \"@context\": \"https:\/\/schema.org\",\n            \"@type\": \"ImageObject\",\n            \"contentUrl\": \"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/async-java-app-development.png\",\n            \"url\": \"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide\",\n            \"name\": \"Async Java App Development CTA\",\n            \"caption\": \"Build future-ready Java apps with asynchronous architecture.\",\n            \"description\": \"Call-to-action image encouraging decision-makers to adopt async Java technologies for innovative solutions.\",\n            \"license\": \"https:\/\/mobisoftinfotech.com\/terms\",\n            \"acquireLicensePage\": \"https:\/\/mobisoftinfotech.com\/acquire-license\",\n            \"creditText\": \"Mobisoft Infotech\",\n            \"copyrightNotice\": \"Mobisoft Infotech\",\n            \"creator\": {\n                \"@type\": \"Organization\",\n                \"name\": \"Mobisoft Infotech\"\n            },\n            \"thumbnail\": \"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/async-java-app-development.png\"\n        },\n        {\n            \"@context\": \"https:\/\/schema.org\",\n            \"@type\": \"ImageObject\",\n            \"contentUrl\": \"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/async-completablefuture-flow-diagram.png\",\n            \"url\": \"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide\",\n            \"name\": \"Async Java Flow with CompletableFuture\",\n            \"caption\": \"Visual explanation of non-blocking execution using CompletableFuture.\",\n            \"description\": \"Infographic showing how Java handles asynchronous operations through CompletableFuture for parallel task execution.\",\n            \"license\": \"https:\/\/mobisoftinfotech.com\/terms\",\n            \"acquireLicensePage\": \"https:\/\/mobisoftinfotech.com\/acquire-license\",\n            \"creditText\": \"Mobisoft Infotech\",\n            \"copyrightNotice\": \"Mobisoft Infotech\",\n            \"creator\": {\n                \"@type\": \"Organization\",\n                \"name\": \"Mobisoft Infotech\"\n            },\n            \"thumbnail\": \"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/async-completablefuture-flow-diagram.png\"\n        },\n        {\n            \"@context\": \"https:\/\/schema.org\",\n            \"@type\": \"ImageObject\",\n            \"contentUrl\": \"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/blocking-java-flow-diagram.png\",\n            \"url\": \"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide\",\n            \"name\": \"Blocking Java Code Execution Flow\",\n            \"caption\": \"How traditional blocking operations affect performance in Java applications.\",\n            \"description\": \"Visual representation of synchronous programming and its limitations in Java-based systems.\",\n            \"license\": \"https:\/\/mobisoftinfotech.com\/terms\",\n            \"acquireLicensePage\": \"https:\/\/mobisoftinfotech.com\/acquire-license\",\n            \"creditText\": \"Mobisoft Infotech\",\n            \"copyrightNotice\": \"Mobisoft Infotech\",\n            \"creator\": {\n                \"@type\": \"Organization\",\n                \"name\": \"Mobisoft Infotech\"\n            },\n            \"thumbnail\": \"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/blocking-java-flow-diagram.png\"\n        },\n        {\n            \"@context\": \"https:\/\/schema.org\",\n            \"@type\": \"ImageObject\",\n            \"contentUrl\": \"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/sync-vs-async-java-diagram.png\",\n            \"url\": \"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide\",\n            \"name\": \"Sync vs Async Java Comparison\",\n            \"caption\": \"Key differences between sync and async models for Java concurrency.\",\n            \"description\": \" Illustration comparing Java\u2019s sync and async approaches, emphasizing performance and responsiveness.\",\n            \"license\": \"https:\/\/mobisoftinfotech.com\/terms\",\n            \"acquireLicensePage\": \"https:\/\/mobisoftinfotech.com\/acquire-license\",\n            \"creditText\": \"Mobisoft Infotech\",\n            \"copyrightNotice\": \"Mobisoft Infotech\",\n            \"creator\": {\n                \"@type\": \"Organization\",\n                \"name\": \"Mobisoft Infotech\"\n            },\n            \"thumbnail\": \"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/sync-vs-async-java-diagram.png\"\n        },\n        {\n            \"@context\": \"https:\/\/schema.org\",\n            \"@type\": \"ImageObject\",\n            \"contentUrl\": \"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/rushikesh-keskar-author.png\",\n            \"url\": \"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide\",\n            \"name\": \"Author: Rushikesh Keskar\",\n            \"caption\": \"Track what matters\u2014conversion, retention, engagement, and more.\",\n            \"description\": \"Profile image of the author Rushikesh Keskar, a specialist in Java multithreading and asynchronous programming techniques.\",\n            \"license\": \"https:\/\/mobisoftinfotech.com\/terms\",\n            \"acquireLicensePage\": \"https:\/\/mobisoftinfotech.com\/acquire-license\",\n            \"creditText\": \"Mobisoft Infotech\",\n            \"copyrightNotice\": \"Mobisoft Infotech\",\n            \"creator\": {\n                \"@type\": \"Organization\",\n                \"name\": \"Mobisoft Infotech\"\n            },\n            \"thumbnail\": \"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/rushikesh-keskar-author.png\"\n        },\n        {\n            \"@context\": \"https:\/\/schema.org\",\n            \"@type\": \"ImageObject\",\n            \"contentUrl\": \"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-async-step-by-step-code.png\",\n            \"url\": \"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide\",\n            \"name\": \"Java Async Programming \u2013 Step-by-Step Code\",\n            \"caption\": \"Practical code breakdown showing how to implement asynchronous programming in Java using CompletableFuture.\",\n            \"description\": \"An Annotated image highlighting a step-by-step implementation of asynchronous programming in Java for CTOs and engineering teams focused on non-blocking backend development.\",\n            \"license\": \"https:\/\/mobisoftinfotech.com\/terms\",\n            \"acquireLicensePage\": \"https:\/\/mobisoftinfotech.com\/acquire-license\",\n            \"creditText\": \"Mobisoft Infotech\",\n            \"copyrightNotice\": \"Mobisoft Infotech\",\n            \"creator\": {\n                \"@type\": \"Organization\",\n                \"name\": \"Mobisoft Infotech\"\n            },\n            \"thumbnail\": \"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-async-step-by-step-code.png\"\n        }\n        ]\n    <\/script>\n","protected":false},"excerpt":{"rendered":"<p>Asynchronous programming, or async programming, is the programming method used to allow a program to start an activity and continue with others while the former goes on, unlike synchronous or blocking operations. This concept is essential in understanding non-blocking I\/O in Java, especially when building scalable, reactive services. For teams looking to adopt or scale [&hellip;]<\/p>\n","protected":false},"author":122,"featured_media":40721,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_s2mail":"","footnotes":""},"categories":[6488],"tags":[6487,6485,6483,6486,6484,6482,6481,6480,6479,6478,6470,6476,6469,6475,6477,6474,6472,6473,6471],"class_list":["post-40708","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-java-programming","tag-async-vs-sync-in-java-async-programming-performance-java","tag-asynchronous-task-execution-asynchronous-rest-calls-in-java-asynchronous-programming-in-java","tag-completablefuture-vs-rxjava-completablefuture-use-cases-completablefuture-chaining","tag-forkjoinpool","tag-java-8-concurrency-utilities-java-8-async-features-handling-exceptions-in-async-java-functional-programming-in-java","tag-java-async","tag-java-asynchronous-api-call","tag-java-asynchronous-programming","tag-java-completablefuture","tag-java-concurrency","tag-java-concurrency-for-beginners-java-concurrency-best-practices","tag-java-executorservice-example","tag-java-future-vs-completablefuture","tag-java-parallel-stream-vs-async-java-multithreading-tutorial","tag-java-performance-tuning","tag-java-reactive-programming","tag-java-thread-management","tag-non-blocking-i-o-in-java","tag-reactive-streams-in-java"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Java Async Programming Guide From Blocking to Blazing Speed<\/title>\n<meta name=\"description\" content=\"Master async programming in Java using Completable Future, non-blocking I\/O &amp; concurrency best practices to boost speed and scalability.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java Async Programming Guide From Blocking to Blazing Speed\" \/>\n<meta property=\"og:description\" content=\"Master async programming in Java using Completable Future, non-blocking I\/O &amp; concurrency best practices to boost speed and scalability.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide\" \/>\n<meta property=\"og:site_name\" content=\"Mobisoft Infotech\" \/>\n<meta property=\"article:published_time\" content=\"2025-06-27T10:38:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-04T05:57:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/og-From-Blocking-to-Blazing.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"525\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Rushikesh Keskar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Rushikesh Keskar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide#article\",\"isPartOf\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide\"},\"author\":{\"name\":\"Rushikesh Keskar\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/fbc54f03ea2a3b8a79389e9d5a091a43\"},\"headline\":\"From Blocking to Blazing: Master Async Programming in Java Like a Pro\",\"datePublished\":\"2025-06-27T10:38:43+00:00\",\"dateModified\":\"2025-11-04T05:57:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide\"},\"wordCount\":1511,\"image\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide#primaryimage\"},\"thumbnailUrl\":\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-async-programming-guide.png\",\"keywords\":[\"async vs sync in java async programming performance java\",\"asynchronous task execution asynchronous rest calls in java asynchronous programming in java\",\"completablefuture vs rxjava completablefuture use cases completablefuture chaining\",\"forkjoinpool\",\"java 8 concurrency utilities java 8 async features handling exceptions in async java functional programming in java\",\"java async\",\"java asynchronous api call\",\"java asynchronous programming\",\"java completablefuture\",\"java concurrency\",\"java concurrency for beginners java concurrency best practices\",\"java executorservice example\",\"java future vs completablefuture\",\"java parallel stream vs async java multithreading tutorial\",\"java performance tuning\",\"java reactive programming\",\"java thread management\",\"non blocking i o in java\",\"reactive streams in java\"],\"articleSection\":[\"Java Programming\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide\",\"url\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide\",\"name\":\"Java Async Programming Guide From Blocking to Blazing Speed\",\"isPartOf\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide#primaryimage\"},\"image\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide#primaryimage\"},\"thumbnailUrl\":\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-async-programming-guide.png\",\"datePublished\":\"2025-06-27T10:38:43+00:00\",\"dateModified\":\"2025-11-04T05:57:43+00:00\",\"author\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/fbc54f03ea2a3b8a79389e9d5a091a43\"},\"description\":\"Master async programming in Java using Completable Future, non-blocking I\/O & concurrency best practices to boost speed and scalability.\",\"breadcrumb\":{\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide#primaryimage\",\"url\":\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-async-programming-guide.png\",\"contentUrl\":\"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-async-programming-guide.png\",\"width\":855,\"height\":392,\"caption\":\"Banner on asynchronous programming in Java for scalable apps\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/mobisoftinfotech.com\/resources\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"From Blocking to Blazing: Master Async Programming in Java Like a Pro\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/#website\",\"url\":\"https:\/\/mobisoftinfotech.com\/resources\/\",\"name\":\"Mobisoft Infotech\",\"description\":\"Discover Mobility\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/mobisoftinfotech.com\/resources\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/fbc54f03ea2a3b8a79389e9d5a091a43\",\"name\":\"Rushikesh Keskar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/7e5eb58a5229ed400d32f8cb703ea437c7a30718d73b5d492d177a0fd5ae037e?s=96&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/7e5eb58a5229ed400d32f8cb703ea437c7a30718d73b5d492d177a0fd5ae037e?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/7e5eb58a5229ed400d32f8cb703ea437c7a30718d73b5d492d177a0fd5ae037e?s=96&r=g\",\"caption\":\"Rushikesh Keskar\"},\"sameAs\":[\"https:\/\/mobisoftinfotech.com\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Java Async Programming Guide From Blocking to Blazing Speed","description":"Master async programming in Java using Completable Future, non-blocking I\/O & concurrency best practices to boost speed and scalability.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide","og_locale":"en_US","og_type":"article","og_title":"Java Async Programming Guide From Blocking to Blazing Speed","og_description":"Master async programming in Java using Completable Future, non-blocking I\/O & concurrency best practices to boost speed and scalability.","og_url":"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide","og_site_name":"Mobisoft Infotech","article_published_time":"2025-06-27T10:38:43+00:00","article_modified_time":"2025-11-04T05:57:43+00:00","og_image":[{"width":1000,"height":525,"url":"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/og-From-Blocking-to-Blazing.png","type":"image\/png"}],"author":"Rushikesh Keskar","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Rushikesh Keskar","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide#article","isPartOf":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide"},"author":{"name":"Rushikesh Keskar","@id":"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/fbc54f03ea2a3b8a79389e9d5a091a43"},"headline":"From Blocking to Blazing: Master Async Programming in Java Like a Pro","datePublished":"2025-06-27T10:38:43+00:00","dateModified":"2025-11-04T05:57:43+00:00","mainEntityOfPage":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide"},"wordCount":1511,"image":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide#primaryimage"},"thumbnailUrl":"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-async-programming-guide.png","keywords":["async vs sync in java async programming performance java","asynchronous task execution asynchronous rest calls in java asynchronous programming in java","completablefuture vs rxjava completablefuture use cases completablefuture chaining","forkjoinpool","java 8 concurrency utilities java 8 async features handling exceptions in async java functional programming in java","java async","java asynchronous api call","java asynchronous programming","java completablefuture","java concurrency","java concurrency for beginners java concurrency best practices","java executorservice example","java future vs completablefuture","java parallel stream vs async java multithreading tutorial","java performance tuning","java reactive programming","java thread management","non blocking i o in java","reactive streams in java"],"articleSection":["Java Programming"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide","url":"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide","name":"Java Async Programming Guide From Blocking to Blazing Speed","isPartOf":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/#website"},"primaryImageOfPage":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide#primaryimage"},"image":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide#primaryimage"},"thumbnailUrl":"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-async-programming-guide.png","datePublished":"2025-06-27T10:38:43+00:00","dateModified":"2025-11-04T05:57:43+00:00","author":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/fbc54f03ea2a3b8a79389e9d5a091a43"},"description":"Master async programming in Java using Completable Future, non-blocking I\/O & concurrency best practices to boost speed and scalability.","breadcrumb":{"@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide#primaryimage","url":"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-async-programming-guide.png","contentUrl":"https:\/\/mobisoftinfotech.com\/resources\/wp-content\/uploads\/2025\/06\/java-async-programming-guide.png","width":855,"height":392,"caption":"Banner on asynchronous programming in Java for scalable apps"},{"@type":"BreadcrumbList","@id":"https:\/\/mobisoftinfotech.com\/resources\/blog\/java-programming\/java-async-programming-guide#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/mobisoftinfotech.com\/resources\/"},{"@type":"ListItem","position":2,"name":"From Blocking to Blazing: Master Async Programming in Java Like a Pro"}]},{"@type":"WebSite","@id":"https:\/\/mobisoftinfotech.com\/resources\/#website","url":"https:\/\/mobisoftinfotech.com\/resources\/","name":"Mobisoft Infotech","description":"Discover Mobility","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/mobisoftinfotech.com\/resources\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/mobisoftinfotech.com\/resources\/#\/schema\/person\/fbc54f03ea2a3b8a79389e9d5a091a43","name":"Rushikesh Keskar","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/7e5eb58a5229ed400d32f8cb703ea437c7a30718d73b5d492d177a0fd5ae037e?s=96&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7e5eb58a5229ed400d32f8cb703ea437c7a30718d73b5d492d177a0fd5ae037e?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7e5eb58a5229ed400d32f8cb703ea437c7a30718d73b5d492d177a0fd5ae037e?s=96&r=g","caption":"Rushikesh Keskar"},"sameAs":["https:\/\/mobisoftinfotech.com\/"]}]}},"_links":{"self":[{"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/posts\/40708","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/users\/122"}],"replies":[{"embeddable":true,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/comments?post=40708"}],"version-history":[{"count":32,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/posts\/40708\/revisions"}],"predecessor-version":[{"id":44991,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/posts\/40708\/revisions\/44991"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/media\/40721"}],"wp:attachment":[{"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/media?parent=40708"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/categories?post=40708"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mobisoftinfotech.com\/resources\/wp-json\/wp\/v2\/tags?post=40708"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}