{"id":18334,"date":"2024-03-15T16:43:16","date_gmt":"2024-03-15T16:43:16","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/"},"modified":"2024-03-21T13:03:37","modified_gmt":"2024-03-21T13:03:37","slug":"how-to-use-countdownlatch-in-java","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/","title":{"rendered":"How to use CountDownLatch in Java?"},"content":{"rendered":"<p>In Java, CountDownLatch is a concurrent utility that allows one or more threads to wait for a set of operations to complete.<\/p>\n<p>The usage method of CountDownLatch is as follows:<\/p>\n<ol>\n<li>Create a CountDownLatch object specifying the number of operations to wait for. For example, if there are n operations that need to wait to complete, a CountDownLatch object can be created and initialized to n.<\/li>\n<li>After each operation is completed, call the countDown() method of CountDownLatch to decrease the value of the counter. This signifies that an operation has been completed.<\/li>\n<li>Call the await() method of CountDownLatch in places where all operations need to be completed. This will cause the calling thread to wait until the counter reaches 0.<\/li>\n<li>When all operations are completed, the value of the counter will become 0, and the calling thread will be released.<\/li>\n<\/ol>\n<p>Below is a simple example code demonstrating the usage of CountDownLatch:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">import<\/span> java.util.concurrent.CountDownLatch;\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">CountDownLatchExample<\/span> {\r\n\r\n   <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">main<\/span><span class=\"hljs-params\">(String[] args)<\/span> <span class=\"hljs-keyword\">throws<\/span> InterruptedException {\r\n      <span class=\"hljs-type\">int<\/span> <span class=\"hljs-variable\">numberOfThreads<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-number\">3<\/span>;\r\n      <span class=\"hljs-type\">CountDownLatch<\/span> <span class=\"hljs-variable\">latch<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">CountDownLatch<\/span>(numberOfThreads);\r\n\r\n      <span class=\"hljs-keyword\">for<\/span> (<span class=\"hljs-type\">int<\/span> <span class=\"hljs-variable\">i<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-number\">0<\/span>; i &lt; numberOfThreads; i++) {\r\n         <span class=\"hljs-type\">Thread<\/span> <span class=\"hljs-variable\">thread<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">Thread<\/span>(<span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">Worker<\/span>(latch));\r\n         thread.start();\r\n      }\r\n\r\n      latch.await();\r\n      System.out.println(<span class=\"hljs-string\">\"All threads have completed their work\"<\/span>);\r\n   }\r\n\r\n   <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">Worker<\/span> <span class=\"hljs-keyword\">implements<\/span> <span class=\"hljs-title class_\">Runnable<\/span> {\r\n      <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">final<\/span> CountDownLatch latch;\r\n\r\n      <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-title function_\">Worker<\/span><span class=\"hljs-params\">(CountDownLatch latch)<\/span> {\r\n         <span class=\"hljs-built_in\">this<\/span>.latch = latch;\r\n      }\r\n\r\n      <span class=\"hljs-meta\">@Override<\/span>\r\n      <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">void<\/span> <span class=\"hljs-title function_\">run<\/span><span class=\"hljs-params\">()<\/span> {\r\n         <span class=\"hljs-comment\">\/\/ \u6267\u884c\u4e00\u4e9b\u64cd\u4f5c<\/span>\r\n         System.out.println(<span class=\"hljs-string\">\"Thread \"<\/span> + Thread.currentThread().getId() + <span class=\"hljs-string\">\" is working\"<\/span>);\r\n         latch.countDown();\r\n      }\r\n   }\r\n}\r\n<\/code><\/pre>\n<p>In the example above, a CountDownLatch object is created and set to wait for 3 threads. Next, three worker threads are created using a for loop, with each thread invoking the countDown() method to decrement the counter&#8217;s value.<\/p>\n<p>Finally, by calling latch.await() method, the main thread will wait until the counter value reaches 0. When all working threads have finished, the counter value will become 0, allowing the main thread to continue executing and print &#8220;All threads have completed their work&#8221;.<\/p>\n<p>This is the basic usage of CountDownLatch. By using CountDownLatch, it is easy to achieve waiting for a group of operations to complete.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Java, CountDownLatch is a concurrent utility that allows one or more threads to wait for a set of operations to complete. The usage method of CountDownLatch is as follows: Create a CountDownLatch object specifying the number of operations to wait for. For example, if there are n operations that need to wait to complete, [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-18334","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to use CountDownLatch in Java? - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to use CountDownLatch in Java?\" \/>\n<meta property=\"og:description\" content=\"In Java, CountDownLatch is a concurrent utility that allows one or more threads to wait for a set of operations to complete. The usage method of CountDownLatch is as follows: Create a CountDownLatch object specifying the number of operations to wait for. For example, if there are n operations that need to wait to complete, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-15T16:43:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-21T13:03:37+00:00\" \/>\n<meta name=\"author\" content=\"Sophia Anderson\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:site\" content=\"@SiliCloudGlobal\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sophia Anderson\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/\"},\"author\":{\"name\":\"Sophia Anderson\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/19a24313de9c988db3d69226b4a40a30\"},\"headline\":\"How to use CountDownLatch in Java?\",\"datePublished\":\"2024-03-15T16:43:16+00:00\",\"dateModified\":\"2024-03-21T13:03:37+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/\"},\"wordCount\":257,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/\",\"name\":\"How to use CountDownLatch in Java? - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T16:43:16+00:00\",\"dateModified\":\"2024-03-21T13:03:37+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to use CountDownLatch in Java?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"name\":\"Silicon Cloud Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\",\"name\":\"Silicon Cloud Blog\",\"url\":\"https:\/\/www.silicloud.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"contentUrl\":\"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png\",\"width\":1024,\"height\":1024,\"caption\":\"Silicon Cloud Blog\"},\"image\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/SiliCloudGlobal\/\",\"https:\/\/twitter.com\/SiliCloudGlobal\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/19a24313de9c988db3d69226b4a40a30\",\"name\":\"Sophia Anderson\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c726c09aa40e37115fb5c62d0c3ed62c16ca255d3763e2e3ae83a70ddf8c2175?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c726c09aa40e37115fb5c62d0c3ed62c16ca255d3763e2e3ae83a70ddf8c2175?s=96&d=mm&r=g\",\"caption\":\"Sophia Anderson\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/sophiaanderson\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to use CountDownLatch in Java? - Blog - Silicon Cloud","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:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/","og_locale":"en_US","og_type":"article","og_title":"How to use CountDownLatch in Java?","og_description":"In Java, CountDownLatch is a concurrent utility that allows one or more threads to wait for a set of operations to complete. The usage method of CountDownLatch is as follows: Create a CountDownLatch object specifying the number of operations to wait for. For example, if there are n operations that need to wait to complete, [&hellip;]","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T16:43:16+00:00","article_modified_time":"2024-03-21T13:03:37+00:00","author":"Sophia Anderson","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Sophia Anderson","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/"},"author":{"name":"Sophia Anderson","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/19a24313de9c988db3d69226b4a40a30"},"headline":"How to use CountDownLatch in Java?","datePublished":"2024-03-15T16:43:16+00:00","dateModified":"2024-03-21T13:03:37+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/"},"wordCount":257,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/","name":"How to use CountDownLatch in Java? - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T16:43:16+00:00","dateModified":"2024-03-21T13:03:37+00:00","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-countdownlatch-in-java\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to use CountDownLatch in Java?"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/blog\/#website","url":"https:\/\/www.silicloud.com\/blog\/","name":"Silicon Cloud Blog","description":"","publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.silicloud.com\/blog\/#organization","name":"Silicon Cloud Blog","url":"https:\/\/www.silicloud.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","contentUrl":"https:\/\/www.silicloud.com\/blog\/wp-content\/uploads\/2023\/11\/EN-SILICON-Full.png","width":1024,"height":1024,"caption":"Silicon Cloud Blog"},"image":{"@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/SiliCloudGlobal\/","https:\/\/twitter.com\/SiliCloudGlobal"]},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/19a24313de9c988db3d69226b4a40a30","name":"Sophia Anderson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c726c09aa40e37115fb5c62d0c3ed62c16ca255d3763e2e3ae83a70ddf8c2175?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c726c09aa40e37115fb5c62d0c3ed62c16ca255d3763e2e3ae83a70ddf8c2175?s=96&d=mm&r=g","caption":"Sophia Anderson"},"url":"https:\/\/www.silicloud.com\/blog\/author\/sophiaanderson\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18334","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=18334"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18334\/revisions"}],"predecessor-version":[{"id":52006,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18334\/revisions\/52006"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=18334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=18334"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=18334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}