{"id":897,"date":"2011-03-21T11:31:44","date_gmt":"2011-03-21T09:31:44","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/2011\/03\/inselupdate-blockierende-wartenschlangen\/"},"modified":"2011-03-21T11:31:56","modified_gmt":"2011-03-21T09:31:56","slug":"inselupdate-blockierende-wartenschlangen","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2011\/03\/inselupdate-blockierende-wartenschlangen\/","title":{"rendered":"Inselupdate: Blockierende Warteschlangen"},"content":{"rendered":"<p>Die Schnittstelle BlockingQueue steht f\u00fcr besondere Queues, die blockieren k\u00f6nnen. Das kann aus zwei Gr\u00fcnden geschehen: entweder sind keine Daten zu entnehmen da die Queue leer ist, oder eine maximale Anzahl von zu haltenden Elementen ist erreicht. Besonders in Produzenten\/Konsumenten-Szenarien sind blockierende Warteschlangen sehr n\u00fctzlich. <\/p>\n<p>Eine performante thread-sichere Implementierung ist in der Praxis sehr wichtig und die Java SE Bibliothek hat zwei besondere Realisierungen auf Lager:<\/p>\n<ul>\n<li>ArrayBlockingQueue: Queue immer mit einer maximalen Kapazit\u00e4t, realisiert intern mit einem Feld<\/li>\n<li>LinkedBlockingQueue: Queue unbeschr\u00e4nkt oder mit maximaler Kapazit\u00e4t, intern realisiert durch eine verkettete Liste<\/li>\n<li>PriorityBlockingQueue: Eine blockierende PriorityQueue<\/li>\n<\/ul>\n<p>Die anderen Realisierungen wie DelayQueue sind f\u00fcr uns jetzt nicht relevant.<\/p>\n<p>Das sch\u00f6ne an blockierenden Warteschlangen ist ihr Verhalten in Produzenten\/Konsumenten-Verh\u00e4ltnissen; ein Thread (oder beliebig viele Threads) setzt (viele setzen) Daten in die Queue, ein Thread (oder beliebig viele Threads) holt (viele Threads holen) die Daten wieder raus. Bei einer Queue ist es ja so, dass sie nach dem FIFO-Verfahren arbeitet, das hei\u00dft, die Daten, die zuerst reingelegt wurden, werden auch zuerst verarbeitet. Bei einer Priorit\u00e4tswarteschlage ist das etwas anders, aber dazu gleich mehr.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Schnittstelle BlockingQueue steht f\u00fcr besondere Queues, die blockieren k\u00f6nnen. Das kann aus zwei Gr\u00fcnden geschehen: entweder sind keine Daten zu entnehmen da die Queue leer ist, oder eine maximale Anzahl von zu haltenden Elementen ist erreicht. Besonders in Produzenten\/Konsumenten-Szenarien sind blockierende Warteschlangen sehr n\u00fctzlich. Eine performante thread-sichere Implementierung ist in der Praxis sehr wichtig [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1],"tags":[],"class_list":["post-897","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/897","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=897"}],"version-history":[{"count":1,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/897\/revisions"}],"predecessor-version":[{"id":898,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/897\/revisions\/898"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=897"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=897"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=897"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}