{"id":18388,"date":"2024-03-15T16:50:44","date_gmt":"2024-03-15T16:50:44","guid":{"rendered":"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/"},"modified":"2024-03-21T13:11:19","modified_gmt":"2024-03-21T13:11:19","slug":"how-to-implement-a-queue-using-the-synchronousqueue-class-in-java","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/","title":{"rendered":"How to implement a queue using the SynchronousQueue class in Java?"},"content":{"rendered":"<p>In Java, a SynchronousQueue is a special type of blocking queue that can only have one element at a time. When a thread tries to put an element into the queue, it will be blocked until another thread tries to take that element out of the queue.<\/p>\n<p>To achieve the functionality of queuing, you can utilize the offer() and take() methods of SynchronousQueue.<\/p>\n<p>Here is a simple example code:<\/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_\">QueueExample<\/span> {\r\n    <span class=\"hljs-keyword\">private<\/span> <span class=\"hljs-keyword\">static<\/span> SynchronousQueue&lt;String&gt; queue = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">SynchronousQueue<\/span>&lt;&gt;();\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> {\r\n        <span class=\"hljs-comment\">\/\/ \u521b\u5efa\u591a\u4e2a\u7ebf\u7a0b<\/span>\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; <span class=\"hljs-number\">5<\/span>; 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>(() -&gt; {\r\n                <span class=\"hljs-keyword\">try<\/span> {\r\n                    <span class=\"hljs-type\">String<\/span> <span class=\"hljs-variable\">name<\/span> <span class=\"hljs-operator\">=<\/span> Thread.currentThread().getName();\r\n                    System.out.println(name + <span class=\"hljs-string\">\" \u6b63\u5728\u6392\u961f...\"<\/span>);\r\n                    queue.offer(name); <span class=\"hljs-comment\">\/\/ \u5c06\u7ebf\u7a0b\u540d\u79f0\u653e\u5165\u961f\u5217<\/span>\r\n                    System.out.println(name + <span class=\"hljs-string\">\" \u6392\u961f\u6210\u529f\uff0c\u5f00\u59cb\u5de5\u4f5c\"<\/span>);\r\n                    Thread.sleep(<span class=\"hljs-number\">1000<\/span>);\r\n                    System.out.println(name + <span class=\"hljs-string\">\" \u5de5\u4f5c\u5b8c\u6210\uff0c\u79bb\u5f00\u961f\u5217\"<\/span>);\r\n                    queue.take(); <span class=\"hljs-comment\">\/\/ \u4ece\u961f\u5217\u4e2d\u53d6\u51fa\u7ebf\u7a0b\u540d\u79f0<\/span>\r\n                } <span class=\"hljs-keyword\">catch<\/span> (InterruptedException e) {\r\n                    e.printStackTrace();\r\n                }\r\n            });\r\n            thread.start();\r\n        }\r\n    }\r\n}\r\n<\/code><\/pre>\n<p>In this example, five threads are created, each attempting to put their own name into a queue and then waiting for other threads to take out their name. While one thread is blocked, the other threads will continue to execute until the blocked thread is awakened.<\/p>\n<p>Please note that the SynchronousQueue does not store elements but serves as an intermediary for inter-thread communication. Therefore, in the process of using it, ensure that there are other threads to retrieve elements from the queue; otherwise, it may cause threads to block indefinitely.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Java, a SynchronousQueue is a special type of blocking queue that can only have one element at a time. When a thread tries to put an element into the queue, it will be blocked until another thread tries to take that element out of the queue. To achieve the functionality of queuing, you can [&hellip;]<\/p>\n","protected":false},"author":6,"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-18388","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 implement a queue using the SynchronousQueue class 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-implement-a-queue-using-the-synchronousqueue-class-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 implement a queue using the SynchronousQueue class in Java?\" \/>\n<meta property=\"og:description\" content=\"In Java, a SynchronousQueue is a special type of blocking queue that can only have one element at a time. When a thread tries to put an element into the queue, it will be blocked until another thread tries to take that element out of the queue. To achieve the functionality of queuing, you can [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-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:50:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-21T13:11:19+00:00\" \/>\n<meta name=\"author\" content=\"Benjamin Taylor\" \/>\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=\"Benjamin Taylor\" \/>\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-implement-a-queue-using-the-synchronousqueue-class-in-java\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/\"},\"author\":{\"name\":\"Benjamin Taylor\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/ac801fe9549a25960ce48aa2e0a691c9\"},\"headline\":\"How to implement a queue using the SynchronousQueue class in Java?\",\"datePublished\":\"2024-03-15T16:50:44+00:00\",\"dateModified\":\"2024-03-21T13:11:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/\"},\"wordCount\":170,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#organization\"},\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/\",\"url\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/\",\"name\":\"How to implement a queue using the SynchronousQueue class in Java? - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/#website\"},\"datePublished\":\"2024-03-15T16:50:44+00:00\",\"dateModified\":\"2024-03-21T13:11:19+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.silicloud.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to implement a queue using the SynchronousQueue class 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\/ac801fe9549a25960ce48aa2e0a691c9\",\"name\":\"Benjamin Taylor\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ec2e3d3e2d525fd148047c4520ae7c1cdccd1f4b48a1a488422b31f04f345c14?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ec2e3d3e2d525fd148047c4520ae7c1cdccd1f4b48a1a488422b31f04f345c14?s=96&d=mm&r=g\",\"caption\":\"Benjamin Taylor\"},\"url\":\"https:\/\/www.silicloud.com\/blog\/author\/benjamintaylor\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to implement a queue using the SynchronousQueue class 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-implement-a-queue-using-the-synchronousqueue-class-in-java\/","og_locale":"en_US","og_type":"article","og_title":"How to implement a queue using the SynchronousQueue class in Java?","og_description":"In Java, a SynchronousQueue is a special type of blocking queue that can only have one element at a time. When a thread tries to put an element into the queue, it will be blocked until another thread tries to take that element out of the queue. To achieve the functionality of queuing, you can [&hellip;]","og_url":"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/","og_site_name":"Blog - Silicon Cloud","article_publisher":"https:\/\/www.facebook.com\/SiliCloudGlobal\/","article_published_time":"2024-03-15T16:50:44+00:00","article_modified_time":"2024-03-21T13:11:19+00:00","author":"Benjamin Taylor","twitter_card":"summary_large_image","twitter_creator":"@SiliCloudGlobal","twitter_site":"@SiliCloudGlobal","twitter_misc":{"Written by":"Benjamin Taylor","Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/#article","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/"},"author":{"name":"Benjamin Taylor","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/ac801fe9549a25960ce48aa2e0a691c9"},"headline":"How to implement a queue using the SynchronousQueue class in Java?","datePublished":"2024-03-15T16:50:44+00:00","dateModified":"2024-03-21T13:11:19+00:00","mainEntityOfPage":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/"},"wordCount":170,"commentCount":0,"publisher":{"@id":"https:\/\/www.silicloud.com\/blog\/#organization"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/","url":"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/","name":"How to implement a queue using the SynchronousQueue class in Java? - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/blog\/#website"},"datePublished":"2024-03-15T16:50:44+00:00","dateModified":"2024-03-21T13:11:19+00:00","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/blog\/how-to-implement-a-queue-using-the-synchronousqueue-class-in-java\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.silicloud.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to implement a queue using the SynchronousQueue class 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\/ac801fe9549a25960ce48aa2e0a691c9","name":"Benjamin Taylor","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.silicloud.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ec2e3d3e2d525fd148047c4520ae7c1cdccd1f4b48a1a488422b31f04f345c14?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ec2e3d3e2d525fd148047c4520ae7c1cdccd1f4b48a1a488422b31f04f345c14?s=96&d=mm&r=g","caption":"Benjamin Taylor"},"url":"https:\/\/www.silicloud.com\/blog\/author\/benjamintaylor\/"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18388","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\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/comments?post=18388"}],"version-history":[{"count":1,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18388\/revisions"}],"predecessor-version":[{"id":52063,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/posts\/18388\/revisions\/52063"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/media?parent=18388"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/categories?post=18388"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/blog\/wp-json\/wp\/v2\/tags?post=18388"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}