{"id":18512,"date":"2024-03-15T17:04:08","date_gmt":"2024-03-15T17:04:08","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/"},"modified":"2024-03-21T13:29:04","modified_gmt":"2024-03-21T13:29:04","slug":"how-to-use-synchronousqueue-in-java","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/","title":{"rendered":"How to use synchronousqueue in Java?"},"content":{"rendered":"<p>In Java, you can use SynchronousQueue for synchronized communication between threads. It is a blocking queue that does not store elements, and the main feature is that the producer thread must wait for the consumer thread to consume an element before producing a new one.<\/p>\n<p>Here is an example code using SynchronousQueue:<\/p>\n<pre class=\"post-pre\"><code><span class=\"hljs-keyword\">import<\/span> java.util.concurrent.SynchronousQueue;\r\n\r\n<span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title class_\">SynchronousQueueExample<\/span> {\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> {\r\n        SynchronousQueue&lt;Integer&gt; queue = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">SynchronousQueue<\/span>&lt;&gt;();\r\n\r\n        <span class=\"hljs-comment\">\/\/ \u521b\u5efa\u751f\u4ea7\u8005\u7ebf\u7a0b<\/span>\r\n        <span class=\"hljs-type\">Thread<\/span> <span class=\"hljs-variable\">producer<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">Thread<\/span>(() -&gt; {\r\n            <span class=\"hljs-keyword\">try<\/span> {\r\n                <span class=\"hljs-type\">int<\/span> <span class=\"hljs-variable\">value<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-number\">1<\/span>;\r\n                <span class=\"hljs-keyword\">while<\/span> (<span class=\"hljs-literal\">true<\/span>) {\r\n                    <span class=\"hljs-comment\">\/\/ \u5c06\u5143\u7d20\u653e\u5165\u961f\u5217<\/span>\r\n                    queue.put(value);\r\n                    System.out.println(<span class=\"hljs-string\">\"\u751f\u4ea7\u8005\u751f\u4ea7\u4e86\uff1a\"<\/span> + value);\r\n                    value++;\r\n                    <span class=\"hljs-comment\">\/\/ \u6a21\u62df\u751f\u4ea7\u8005\u751f\u4ea7\u65f6\u95f4<\/span>\r\n                    Thread.sleep(<span class=\"hljs-number\">1000<\/span>);\r\n                }\r\n            } <span class=\"hljs-keyword\">catch<\/span> (InterruptedException e) {\r\n                e.printStackTrace();\r\n            }\r\n        });\r\n\r\n        <span class=\"hljs-comment\">\/\/ \u521b\u5efa\u6d88\u8d39\u8005\u7ebf\u7a0b<\/span>\r\n        <span class=\"hljs-type\">Thread<\/span> <span class=\"hljs-variable\">consumer<\/span> <span class=\"hljs-operator\">=<\/span> <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">Thread<\/span>(() -&gt; {\r\n            <span class=\"hljs-keyword\">try<\/span> {\r\n                <span class=\"hljs-keyword\">while<\/span> (<span class=\"hljs-literal\">true<\/span>) {\r\n                    <span class=\"hljs-comment\">\/\/ \u4ece\u961f\u5217\u4e2d\u53d6\u51fa\u5143\u7d20<\/span>\r\n                    <span class=\"hljs-type\">int<\/span> <span class=\"hljs-variable\">value<\/span> <span class=\"hljs-operator\">=<\/span> queue.take();\r\n                    System.out.println(<span class=\"hljs-string\">\"\u6d88\u8d39\u8005\u6d88\u8d39\u4e86\uff1a\"<\/span> + value);\r\n                    <span class=\"hljs-comment\">\/\/ \u6a21\u62df\u6d88\u8d39\u8005\u6d88\u8d39\u65f6\u95f4<\/span>\r\n                    Thread.sleep(<span class=\"hljs-number\">2000<\/span>);\r\n                }\r\n            } <span class=\"hljs-keyword\">catch<\/span> (InterruptedException e) {\r\n                e.printStackTrace();\r\n            }\r\n        });\r\n\r\n        <span class=\"hljs-comment\">\/\/ \u542f\u52a8\u751f\u4ea7\u8005\u548c\u6d88\u8d39\u8005\u7ebf\u7a0b<\/span>\r\n        producer.start();\r\n        consumer.start();\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>In the above code, first a SynchronousQueue instance is created. Then a producer thread is created to continuously produce elements and put them into the queue. A consumer thread is created to continuously take elements from the queue and consume them. The producer and consumer threads run simultaneously, but the producer must wait for the consumer to finish consuming an element before it can produce new elements, thus achieving synchronization between the threads.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Java, you can use SynchronousQueue for synchronized communication between threads. It is a blocking queue that does not store elements, and the main feature is that the producer thread must wait for the consumer thread to consume an element before producing a new one. Here is an example code using SynchronousQueue: import java.util.concurrent.SynchronousQueue; public [&hellip;]<\/p>\n","protected":false},"author":14,"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-18512","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 synchronousqueue 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-synchronousqueue-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 synchronousqueue in Java?\" \/>\n<meta property=\"og:description\" content=\"In Java, you can use SynchronousQueue for synchronized communication between threads. It is a blocking queue that does not store elements, and the main feature is that the producer thread must wait for the consumer thread to consume an element before producing a new one. Here is an example code using SynchronousQueue: import java.util.concurrent.SynchronousQueue; public [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-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-15T17:04:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-21T13:29:04+00:00\" \/>\n<meta name=\"author\" content=\"Noah Thompson\" \/>\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=\"Noah Thompson\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minute\" \/>\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-synchronousqueue-in-java\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/\"},\"author\":{\"name\":\"Noah Thompson\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/2e83cc6ab9f60d36921c2d0f9f280f4a\"},\"headline\":\"How to use synchronousqueue in Java?\",\"datePublished\":\"2024-03-15T17:04:08+00:00\",\"dateModified\":\"2024-03-21T13:29:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/\"},\"wordCount\":131,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/\",\"name\":\"How to use synchronousqueue in Java? - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T17:04:08+00:00\",\"dateModified\":\"2024-03-21T13:29:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to use synchronousqueue 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\/2e83cc6ab9f60d36921c2d0f9f280f4a\",\"name\":\"Noah Thompson\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/350e537e1530ede2762ee0237e877d6693f4f7163ab4f303202cc9a6b27b6cb4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/350e537e1530ede2762ee0237e877d6693f4f7163ab4f303202cc9a6b27b6cb4?s=96&d=mm&r=g\",\"caption\":\"Noah Thompson\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/noahthompson\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to use synchronousqueue 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-synchronousqueue-in-java\/","og_locale":"en_US","og_type":"article","og_title":"How to use synchronousqueue in Java?","og_description":"In Java, you can use SynchronousQueue for synchronized communication between threads. It is a blocking queue that does not store elements, and the main feature is that the producer thread must wait for the consumer thread to consume an element before producing a new one. Here is an example code using SynchronousQueue: import java.util.concurrent.SynchronousQueue; public [&hellip;]","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T17:04:08+00:00","article_modified_time":"2024-03-21T13:29:04+00:00","author":"Noah Thompson","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Noah Thompson","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/"},"author":{"name":"Noah Thompson","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/2e83cc6ab9f60d36921c2d0f9f280f4a"},"headline":"How to use synchronousqueue in Java?","datePublished":"2024-03-15T17:04:08+00:00","dateModified":"2024-03-21T13:29:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/"},"wordCount":131,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/","name":"How to use synchronousqueue in Java? - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T17:04:08+00:00","dateModified":"2024-03-21T13:29:04+00:00","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-use-synchronousqueue-in-java\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to use synchronousqueue 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\/2e83cc6ab9f60d36921c2d0f9f280f4a","name":"Noah Thompson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/350e537e1530ede2762ee0237e877d6693f4f7163ab4f303202cc9a6b27b6cb4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/350e537e1530ede2762ee0237e877d6693f4f7163ab4f303202cc9a6b27b6cb4?s=96&d=mm&r=g","caption":"Noah Thompson"},"url":"https:\/\/www.silicloud.com\/blog\/author\/noahthompson\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18512","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\/14"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=18512"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18512\/revisions"}],"predecessor-version":[{"id":52197,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18512\/revisions\/52197"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=18512"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=18512"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=18512"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}